2012-03-19 43 views
3

在應用程序啓動過程中,我顯示一個表視圖。每行以某種形式顯示一個託管對象的數據。一位客戶報告應用程序啓動時發生崩潰。我看着他的崩潰日誌,並可以追蹤到[NSManagedObject valueForKey:]方法中使用cellForRowAtIndexPath方法的地方。該應用程序與[NSManagedObject valueForUndefinedKey:]異常崩潰。使用valueForUndefinedKey啓動時應用程序崩潰

1000多臺設備中只有一臺設備如何才能解決這個問題?運行相同版本的iOS和應用程序,我無法在我的任何設備中模擬它。出了什麼問題?

Last Exception Backtrace: 

0 CoreFoundation     0x3549e88f __exceptionPreprocess + 163 
1 libobjc.A.dylib     0x368c5259 objc_exception_throw + 33 
2 CoreFoundation     0x3549e5c5 -[NSException init] + 1 
3 CoreData      0x329d3b23 -[NSManagedObject valueForUndefinedKey:] + 327 
4 Foundation      0x312b59d1 _NSGetUsingKeyValueGetter + 125 
5 CoreData      0x3298d995 -[NSManagedObject valueForKey:] + 121 
6 MyApp     0x0000c513 -[Activity isOn:] (Activity.m:371) 
7 MyApp     0x0000beaf -[Activity firstMarkableDate] (Activity.m:163) 
8 MyApp     0x0000c0cb -[Activity statusString] (Activity.m:220) 
9 MyApp     0x0000bd51 -[Activity statusColor] (Activity.m:139) 
10 MyApp     0x00004af1 -[ActivityListViewController tableView:cellForRowAtIndexPath:] (ActivityListViewController.m:418) 
11 UIKit       0x3251d0a3 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 547 
+0

你有沒有在任何時候更新你的應用程序?換句話說,它可能是核心數據模型中的版本更改嗎? – Till 2012-03-19 13:27:51

+0

應用程序的核心數據模式在任何udpates中都沒有改變。並且相同的應用程序版本可以在我們的每個設備(非開發設備)上完美運行 – Anand 2012-03-19 13:35:07

+0

您必須看看您的'Activity',它似乎沒有實現'-isOn:'(注意冒號)。 – 2012-03-19 13:39:06

回答

0

這可能是一個內存管理問題。見-[Activity isOn:]它調用valueForKey:。你發送的對象valueForKey:顯然是錯誤的類。看看對象來自哪裏。

該對象可能會被過度釋放,並且其內存地址可能會被不同類的對象佔用,而該對象不符合KVO對trackname密鑰的要求。如果是這樣的話,我敢打賭你的應用程序更經常得到EXC_BAD_ACCESS

爲什麼會發生這種情況? NSManagedObjects在他們的一生中有許多微妙之處。例如,它們可能會在您的應用的其他部分被刪除,因此您應該始終期待並採取適當的行動。

我希望這會指出你在正確的方向。