2010-09-30 63 views
0

我的應用基於兩個類:JamJamItem,每個類都有一個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配置爲按名稱排序。在JamItemListTableViewControllerNSFetchedResultsControllerJamItem.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' 

回答

1

我想說的檢查您的筆尖,看看是否有名稱,在名稱不存在的連接,但在犯罪嫌疑人它也會第一次崩潰。重新檢查你定義的名字。

+0

嗨喬丹,謝謝你的期待。是的,「重新檢查你定義的名字」是一個好主意。我看了一下每一點。我發現在創建NSFetchedResultsController的NSSortDescriptor時有兩個名字。所有其他的refs都是來自實例的getter和setter,用於詳細視圖或表格單元格。我仔細檢查了那些是否對這次事故有任何改變 - 沒有任何改變!此外,我有筆尖細部視圖,但沒有爲表列表視圖。 – Barnaby 2010-10-01 06:17:44

+0

感謝哥們,它爲我節省了一天。也許我已經編輯了Coredata以及Nib文件,並且反過來也是因爲Nib文件中的問題。 – prajul 2013-03-13 11:54:02

0

好吧,所以我自己修復它。

我不能完全肯定發生了什麼事情,但它在我看來,這是原本存在,然後取出,場似乎是在覈心數據的地方?

反正對我來說,倫敦定盤去除所有的核心數據文件和管理對象的文件,並刪除SIM卡應用的實例,並重新開始。

花了幾分鐘的時間做了並解決了問題 - 現在果醬可以再次愉快地流動!

我寧願解決問題,但時間短缺,我已經花了太多時間看它!

相關問題