Как изменить NSManagedObjects: изменение имени вызывает ошибку - PullRequest
0 голосов
/ 05 сентября 2011

Во время работы над проектом я столкнулся со следующей проблемой: в моей модели CoreData у меня была сущность с именем Object, которая отлично работала в симуляторе (с предупреждением), но не на реальном устройстве iOS. Так что мне пришлось изменить название организации. Сначала я попытался просто изменить имя объекта в моей модели и сгенерировать новый подкласс NSManagedObject на основе этого.

Это дало мне всевозможные ошибки, поэтому я решил удалить сущность и создать совершенно новую. Этот объект, который я назвал REObject (Real Estate Object), я снова сгенерировал новый подкласс, основанный на новой сущности, и изменил весь мой код, чтобы использовать REObject вместо объекта. Я также очистил свой проект и удалил приложение с моего тестирующего устройства, но все равно я получаю ошибки, в настоящее время я не могу их исправить.

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «executeFetchRequest: ошибка: запрос на выборку должен иметь сущность.»

Я использую следующий код для удаления всех объектов в случае получения новых данных, и он выдает ошибку при выполнении выборки:

- (void) deleteAllEntitiesOfType: (NSString *) entityType
{
    NSManagedObjectContext *context = [(Achmea_CatalogusAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

    NSFetchRequest * all = [[NSFetchRequest alloc] init];
    [all setEntity:[NSEntityDescription entityForName:entityType inManagedObjectContext:context]];
    [all setIncludesPropertyValues:NO]; //only fetch the managedObjectID

    NSError * error = nil;
    NSArray * objects = [context executeFetchRequest:all error:&error];
    [all release];
    //error handling goes here
    for (NSManagedObject * o in objects) {
        [context deleteObject:o];
    }

    [context save:&error];

}

Этот метод работал нормально до того, как я изменил имя объекта, но теперь он продолжает выдавать мне эту ошибку.

Редактировать: Такое чувство, что приложение / проект не видит изменений, которые я внес в модель данных.

1 Ответ

1 голос
/ 06 сентября 2011

Это:

[NSEntityDescription entityForName:entityType inManagedObjectContext:context]

... не возвращает описание пригодной для использования сущности по какой-либо причине.

Я бы предложил разорвать этот вызов на собственную строку и записать результатчтобы увидеть, что вы на самом деле получаете обратно.

Все, что требуется, - это одна опечатка в любом месте от модели данных до вызова метода, чтобы создать эту проблему.

В будущем избегайте таких имен, как object и entity.Objective-C имеет глобальное открытое пространство имен, поэтому такие имена могут вызывать конфликты имен.Длинные, подробные имена являются самыми безопасными и, в долгосрочной перспективе, легче для чтения.

...