Я получил следующее сообщение об ошибке:Еще одна, причины: «+ entityForName: не могли определить местонахождение NSManagedObjectModel для имени объекта
2012-04-18 10:15:49.585 FoodXJournal[13931:fb03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'CommodityTypes''
Я прочитал большинство других вопросов с этой темой, и сделать некоторые проверка.
У меня есть контроллер подробного представления, содержащий статический вид таблицы. Одна ячейка табличного представления помечена как «Удалить» и связана с секцией с именем «deleteCT». Я хочу, чтобы приложение удаляло self.detailItem
и переходило к контроллеру главного представления, когда эта ячейка подключена. Вот мой метод. Все строки NSLog предназначены для отладки.
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"deleteCT"]) {
if (![self.detailItem.myCommodities count]) {
NSLog(@"Testing");
NSLog(@"myCommodities is empty:%@", [self.detailItem.myCommodities count]);
NSLog(@"self.detailItem HAS a context:%@", [self.detailItem managedObjectContext]);
NSLog(@"self.detailItem is of CommodityTypes:%@", [[self.detailItem entity] name]);
NSLog(@"self.detailItem has a managed object model:%@", [[self.detailItem entity] managedObjectModel]);
[[self.detailItem managedObjectContext] deleteObject:self.detailItem];
}
}
}
Вот журнал. Я получить в этом методе
2012-04-18 10:15:49.544 FoodXJournal[13931:fb03] Testing
встречаю мое состояние для удаления,
2012-04-18 10:15:49.544 FoodXJournal[13931:fb03] myCommodities is empty:(null)
сообщение об ошибке говорит '+entityForName: could not locate an NSManagedObjectModel for entity name 'CommodityTypes'
, но self.detailItem
имеет контекст.
2012-04-18 10:15:49.545 FoodXJournal[13931:fb03] self.detailItem HAS a context:<NSManagedObjectContext: 0x6d7e740>
Да, self.detailItem
является тип сущности, я имею в виду:
2012-04-18 10:15:49.546 FoodXJournal[13931:fb03] self.detailItem is of CommodityTypes:CommodityTypes
И, да, что тип объекта (NSLog(@"self.detailItem is of CommodityTypes:%@", [[self.detailItem entity] name]);
) имеет управляемую объектную модель:
Управляемый объект модель довольно длинная, поэтому я показываю только ее первую часть:
2012-04-18 10:15:49.565 FoodXJournal[13931:fb03] self.detailItem has a managed object model:(<NSManagedObjectModel: 0x6d73250>) isEditable 0, entities {
Accounts = "(<NSEntityDescription: 0x6d71120>) name Accounts, managedObjectClassName Accounts, renamingIdentifier Accounts, isAbstract 0, superentity name Grandparent, properties {\n \"account_1\" = \"(<NSAttributeDescription: 0x6d6e9d0>), name account_1, isOptional 1, isTransient 0, entity Accounts,
прокрутка вниз:
CommodityTypes = "(<NSEntityDescription: 0x6d71240>) name CommodityTypes, managedObjectClassName CommodityTypes, renamingIdentifier CommodityTypes, isAbstract 0, superentity name Grandparent, properties {\n myCommodities = \"(<NSRelationshipDescription: 0x6d701f0>), name myCommodities, isOptional 1, isTransient 0, entity CommodityTypes,
CommodityTypes
определяется в объектной модели управляемой.
Так почему же [[self.detailItem managedObjectContext] deleteObject:self.detailItem];
авария?!?
Есть ли причина, по которой я не могу удалить self.detailItem
в рамках prepareForSegue? Нужно ли мне назначать действие ячейке или метке, а затем программировать вызов segue?
Я попытался заменить проблемную строку этими тремя строками в случае, если возникла проблема с доступом, но она все еще разбилась. '// [[self.detailItem managedObjectContext] deleteObject: self.detailItem]; NSManagedObjectContext * thisContext = [self.detailItem managedObjectContext]; NSManagedObject * thisItem = self.detailItem; [thisContext deleteObject: thisItem]; ' – adamek
Вы уверены, что это линия, вызывающая крушение? Сообщение об ошибке выглядит так, будто оно исходит от одного из методов, которые _creates_ управляют объектами – jrturton