Основные данные: сбой сохранения NSManagedObjectContext с нераспознанным селектором - PullRequest
0 голосов
/ 26 августа 2010

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

  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.Это в отдельной теме?Я слышал, что managedObjectContext не является потокобезопасным.Но я не получаю ту же ошибку, которую ожидаю в этом случае.

1 Ответ

2 голосов
/ 26 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...