我的应用程序基于两个类:Jam
和JamItem
,每个类都有一个TableViewController来显示/添加项目。
该模型包含两个类的两个实体,它们之间存在可选的一对一关系。 JamItem
有一个名称字段和一个价格字段。 Jam
有一个数量字段。这两个实体有相应的NSManagedObject
类。
这两个列表都基于表列表视图控制器,并在Apple站点上的Recipes示例中建模。 JamListTableViewController
显示已添加到列表中的所有JamItem
个实例。单击“添加”时,将创建JamItemListTableViewController
的新实例并将其推送到导航堆栈。这会列出已创建的JamItem
个实例。选择JamItem
后,- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
方法会创建JamItem
的实例,并通过委托将其传回JamListTableViewController
。然后,这会创建Jam
的新实例并将JamItem
添加到其中,然后保存。
我可以在模拟器上运行时完美运行应用程序并使用干净的数据库第一次运行!
JamItemListTableViewController
始终有效,我可以愉快地添加和删除列表中的“果酱项目”。但是,如果我停止应用并重新运行,然后尝试将新的JamItem
添加到果酱列表(JamListTableViewController
),则JamListTableViewController
调用[jam.managedObjectContext save:&error]
时会崩溃我得到下面的错误,我认为这是它试图按名称排序的地方。
NSFetchedResultsController
中的JamItemListTableViewController
配置为按名称排序。 NSFetchedResultsController
中的JamItemListTableViewController
按JamItem.name
订购
我希望这是有道理的,因为我已经把头发拉了几个星期,现在试图找到解决方案。我想我可能已经(或者没有)发布了一个对象,这导致JamItem
列表标记它已被更新并开始尝试重新排序其列表。
< / p>
这是错误的转储:
2010-09-29 07:20:00.443 Jams[12451:207] Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. [<UINavigationItem 0x5b4dc30> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name. with userInfo {
NSTargetObjectUserInfoKey = "<UINavigationItem: 0x5b4dc30>";
NSUnknownUserInfoKey = name;
}
2010-09-29 07:20:00.446 Jams[12451:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UINavigationItem 0x5b4dc30> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.'
*** Call stack at first throw:
(
0 CoreFoundation 0x02577919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x026c55de objc_exception_throw + 47
2 CoreFoundation 0x02577851 -[NSException raise] + 17
3 Foundation 0x000d96b1 -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 279
4 Foundation 0x00040868 _NSGetUsingKeyValueGetter + 147
5 Foundation 0x0003fd2e -[NSObject(NSKeyValueCoding) valueForKey:] + 278
6 Foundation 0x00043535 -[NSObject(NSKeyValueCoding) valueForKeyPath:] + 381
7 Foundation 0x000f7c4f -[NSSortDescriptor compareObject:toObject:] + 128
8 CoreData 0x0237cb5e +[NSFetchedResultsController(PrivateMethods) _insertIndexForObject:inArray:lowIdx:highIdx:sortDescriptors:] + 286
9 CoreData 0x0237d1b2 -[NSFetchedResultsController(PrivateMethods) _postprocessInsertedObjects:] + 402
10 CoreData 0x023831bc -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 1804
11 Foundation 0x00035c1d _nsnote_callback + 145
12 CoreFoundation 0x0254fcf9 __CFXNotificationPost_old + 745
13 CoreFoundation 0x024cf11a _CFXNotificationPostNotification + 186
14 Foundation 0x0002b7c2 -[NSNotificationCenter postNotificationName:object:userInfo:] + 134
15 CoreData 0x022bf519 -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 89
16 CoreData 0x0232eb33 -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:] + 259
17 CoreData 0x022a1f78 -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 1352
18 CoreData 0x022dba15 -[NSManagedObjectContext save:] + 149
19 JamsApp 0x000064b3 -[JamsListTableViewController insertJamItem:] + 168
20 JamsApp 0x00006405 -[JamsListTableViewController selectedJamItem:] + 43
21 JamsApp 0x00003f41 -[JamItemListTableViewController tableView:didSelectRowAtIndexPath:] + 143
22 UIKit 0x0033d718 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140
23 UIKit 0x00333ffe -[UITableView _userSelectRowAtIndexPath:] + 219
24 Foundation 0x0004acea __NSFireDelayedPerform + 441
25 CoreFoundation 0x02558d43 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
26 CoreFoundation 0x0255a384 __CFRunLoopDoTimer + 1364
27 CoreFoundation 0x024b6d09 __CFRunLoopRun + 1817
28 CoreFoundation 0x024b6280 CFRunLoopRunSpecific + 208
29 CoreFoundation 0x024b61a1 CFRunLoopRunInMode + 97
30 GraphicsServices 0x02ddc2c8 GSEventRunModal + 217
31 GraphicsServices 0x02ddc38d GSEventRun + 115
32 UIKit 0x002d9b58 UIApplicationMain + 1160
33 JamsApp 0x00001c0c main + 102
34 JamsApp 0x00001b9d start + 53
)
terminate called after throwing an instance of 'NSException'
答案 0 :(得分:1)
我要检查你的笔尖,看看你是否有名字的连接,名字不存在,但怀疑它会在第一次崩溃。重新检查您定义名称的所有位置。
答案 1 :(得分:0)
好的,所以我自己解决了。
我不完全确定发生了什么事,但在我看来,原来然后移除的字段似乎在核心数据中某处?
无论如何,我的修复方法是删除所有核心数据文件和托管对象文件,并在sim中删除应用程序实例,然后重新开始。
这需要几分钟才能解决问题 - 现在堵塞可以再次快乐地流动!
我宁愿解决这个问题,但是时间紧迫,我已经花了太多时间看着它!