2012-08-14 72 views
0

創建NSFetchedResultsController對象時越來越objc_exception_throw創建NSFetchedResultsController

編輯

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
// Edit the entity name as appropriate. 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Subscriptions" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

// Set the batch size to a suitable number. 
[fetchRequest setFetchBatchSize:20]; 

編輯結束

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 


#0 0x977109c6 in __pthread_kill() 
#1 0x96296f78 in pthread_kill() 
#2 0x96287bdd in abort() 
#3 0x0022eb71 in uncaught_exception_handler() 
#4 0x024b70fc in __handleUncaughtException() 
#5 0x0264af0f in _objc_terminate() 
#6 0x052fb8de in safe_handler_caller() 
#7 0x052fb946 in std::terminate() 
#8 0x052fcab2 in __cxa_throw() 
#9 0x0264ade1 in objc_exception_throw() 
#10 0x00617f39 in -[NSFetchedResultsController initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:]() 

任何想法,我應該開始我收到以下錯誤,當尋找問題。這個錯誤沒有任何幫助。

我已經放了一個斷點並已經檢查了輸入 init函數有兩個輸入,一個是管理對象,第二個是獲取請求。

這兩個對象都是有效的,不像下面的答案中提到的那樣。

** **解決方案 看來,排序描述符是強制性的,感謝羅格

+0

您可以發佈在控制檯中打印的異常消息嗎? – 2012-08-14 16:23:25

+0

在該行放置一個斷點。檢查'initWith ...'的所有輸入是否有效。 – Mundi 2012-08-14 16:47:40

+0

@mundi檢查我的編輯請 – Anand 2012-08-16 11:28:16

回答

3

其實,這是一個非常有用的錯誤。如果你打算用objective-c編程,你需要習慣於讀取堆棧跟蹤。

它說你給initWithFetchRequest吃東西不好吃。事實上,它是如此糟糕,它拋出了一個例外。此外,我們知道你沒有異常處理程序,因爲std :: terminate被調用,並最終程序中止。

你可以@catch異常並自己處理它以查看問題,或者更好的辦法是設置一個斷點來捕獲所有異常(因爲在objective-c中一個很好的建議,實際上是一個例外)。

單擊斷點窗格(在左側,帶有向右箭頭的圖標)。底部是一點+。點擊它。選擇「添加異常斷點」並讓它在所有異常點處拋出。

現在,你可以看看實際的異常,它會引導你。很可能,它會告訴你取回請求沒有正確配置。它也可能是你給它一個糟糕的MOC或其他參數。

+0

檢查我的編輯請求 – Anand 2012-08-16 11:28:31

+0

猜猜這是提取請求畢竟,我沒有提供排序描述符,這真的很奇怪,因爲我不關心它。 – Anand 2012-08-16 11:44:20