Основные данные:Сбой сохранения NSManagedObjectContext из-за нераспознанного селектора

StackOverflow https://stackoverflow.com/questions/3569903

Вопрос

Я пытаюсь добавить основные данные в существующее приложение, что непросто, учитывая, что вся документация и каждое руководство начинаются с создания приложения, которое с самого начала использует основные данные.Итак, я пытаюсь преобразовать существующий класс модели в основной объект данных.Вот что я сделал:

  1. Добавьте базовую структуру данных.
  2. Добавьте файл xcdatamodel.Он показал мне диалоговое окно, в котором я мог добавить существующий класс, поэтому я добавил свою модель.Затем я подправил атрибуты и рассказал, какие это были типы.
  3. Вместо создания нового класса модели (поскольку он у меня уже есть) я создал тестовый проект, чтобы посмотреть, как он будет выглядеть, и соответствующим образом скорректировал свой класс.Это включало изменение его для наследования от NSManagedObject, изменение моих свойств на динамические, удаление вызовов выпуска и т. д.
  4. Добавлены объекты Core Data в делегат моего приложения, следуя этот пример.
  5. В моем ViewController, где я размещал свою модель, я изменил ее на

    MyModel *model = (MyModel*)[NSEntityDescription insertNewObjectForEntityForName:@"MyModel"] inManagedObjectContext:[delegate managedObjectContext];
    

Обратите внимание, что делегат — это ссылка на делегат моего приложения, объявленный ранее.Возможно, это не самый разумный способ сделать это.

После установки всех свойств у меня есть:

    [[delegate managedObjectContext] save:&error];

Эта строка выходит из строя, и обратная трассировка говорит, что она внутри. [NSSqlLiteConnection execute], около 8 уровней внутри функции сохранения.Исключением является:

*-[NSConcreteValue UTF8String]: unrecognized selector sent to instance*

Какова эта конкретная ценность?И почему это называется, кем?Если это имеет значение, моя модель, создающая/сохраняющий код, находится внутри функции, которая является обратным вызовом для NSNotification.Это в отдельной теме?Я слышал, что управляемыйObjectContext не является потокобезопасным.Но я не получаю ту же ошибку, которую ожидал бы в этом случае.

Это было полезно?

Решение

Что ж, я почти уверен, что у вас есть свойство, объявленное как NSString в вашей модели базы данных (.xcdatamodel), которое объявлено как что-то еще (возможно, NSNumber) в вашей объектной модели.При компиляции вашего кода предупреждения не выдаются, но когда CoreData пытается сохранить moc (т.е.:запись данных в постоянное хранилище, также известное как ваша база данных SQLite), происходит сбой, когда CoreData пытается преобразовать предполагаемую NSString в кодировку UTF8.

Вам следует дважды проверить свои свойства как в модели базы данных, так и в объектной модели.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top