我的應用基於兩個類:Jam
和JamItem
,每個類都有一個TableViewController來顯示/添加項目。
我的iPhone核心數據應用第一次運行完美,但在運行後崩潰
該模型包含兩個類的兩個實體,並且它們之間存在可選的一對一關係。 JamItem
有一個名稱字段和一個價格字段。 Jam
有一個數量字段。這兩個實體有相應的NSManagedObject
類。
這兩個列表均基於表列表視圖控制器,並在Apple站點上的Recipes示例上建模。 JamListTableViewController
顯示已添加到列表中的所有JamItem
實例。當我點擊添加時,會創建一個JamItemListTableViewController
的新實例並將其推入導航堆棧。這列出了已經創建的JamItem
實例。當選擇JamItem
時,- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
方法將創建JamItem
的實例,並通過代理將其傳回JamListTableViewController
。然後創建一個Jam
的新實例並將JamItem
添加到它並保存。
我可以在模擬器上全新運行應用程序,並在第一次運行時使用乾淨的數據庫!
JamItemListTableViewController
始終有效,我可以愉快地從列表中添加和刪除'jam items'。但是,如果我停止應用程序,然後重新運行,然後嘗試一個新的JamItem
添加到果醬列表(JamListTableViewController
),它崩潰時JamListTableViewController
調用[jam.managedObjectContext save:&error]
,我得到下面的錯誤,我認爲這是它試圖按名稱分類。
NSFetchedResultsController
in JamItemListTableViewController
配置爲按名稱排序。在JamItemListTableViewController
的NSFetchedResultsController
由JamItem.name
下令我希望這是有道理的,因爲我一直在拉我的頭髮了幾個星期,現在試圖找到解決方案。我想我可能有(或沒有)發佈了一個對象,這是造成JamItem
列表標誌,它已被更新,並開始試圖重新排序的名單。
這是錯誤的轉儲:
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'
嗨喬丹,謝謝你的期待。是的,「重新檢查你定義的名字」是一個好主意。我看了一下每一點。我發現在創建NSFetchedResultsController的NSSortDescriptor時有兩個名字。所有其他的refs都是來自實例的getter和setter,用於詳細視圖或表格單元格。我仔細檢查了那些是否對這次事故有任何改變 - 沒有任何改變!此外,我有筆尖細部視圖,但沒有爲表列表視圖。 – Barnaby 2010-10-01 06:17:44
感謝哥們,它爲我節省了一天。也許我已經編輯了Coredata以及Nib文件,並且反過來也是因爲Nib文件中的問題。 – prajul 2013-03-13 11:54:02