2013-02-11 51 views
3

我遇到了一個令人不安的/莫名其妙的錯誤。核心數據似乎吞噬了它自己的例外!當使用(超級有用)CoreDataHelper時,我寫了一個格式錯誤的提取,導致「未實現SQL謂詞生成」異常。這一部分很簡單,真的是很奇怪的是,這個異常被捕獲到某處並被吞下,這意味着我的代碼在該提取之後跳過了該方法的其餘部分,並且在沒有任何控制檯消息的情況下返回到主循環。相當令人氣憤。核心數據吞噬未捕獲的異常

最終我能包住實際在@try聲明中提取請求並@catch例外:

@try{ 
fetchResults = [managedObjectContext executeFetchRequest:request error:&error]; 
    NSLog(@"fetch successful"); 
} 
@catch (NSException* exception) { 
    NSLog(@"caught exception!\n\n%@\n\n%@\n\n%@",[exception name], [exception reason], [exception userInfo]); 
} 

這讓我弄清楚它是什麼,但它仍然使沒有意義那它會被抓到某處。我沒有使用@ try/@ catch 任何地方其他在我的代碼,而不是測試這個。

我也嘗試創建一個空白的核心數據項目和使用CoreDataHelper沒有@嘗試/ @ catch語句,試圖找出問題,沒有別的項目,CoreDataHelper的作品,因爲它應該返回:

CoreDataTest[1044:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unimplemented SQL generation for predicate ("test" LIKE attribute)' 

因此,我的項目中的某些東西正在捕捉並忽略此異常,但它不是我,除非我可以在不使用@catch的情況下以某種方式執行此操作。

它可能是什麼?!

+0

你能發表完整的代碼嗎?我相信你在這裏有一個謂詞,這是導致問題的原因。只是一個外部的想法,在謂詞中使用'like'來對照不是核心數據一部分的變量。 – 2013-02-11 17:44:19

+0

哦,我知道問題出在我的謂詞的格式上,我真正的問題是「爲什麼這個異常被捕獲並被忽略,除非我自己明確地捕獲它?」 – 2013-02-11 17:47:13

+1

當異常發生並被吞下時,您是否有任何機會在控制檯中獲得「NSRunLoop忽略異常...」消息?我找不到任何Apple提供的有關異常的「NSRunLoop」行爲的實際文檔,但http://stackoverflow.com/questions/4648952/objective-c-exceptions問題上的接受答案指出,這種情況在一些情況下很常見案例。 – 2013-02-11 18:18:27

回答

2

Got it!

我正在使用具有自己的庫的外部附件(Linea Pro-4條形碼掃描儀/ MSR),即使是在其最新版本的框架中,也捕捉到異常。

我設置了我的空白測試項目,在運行相同的獲取請求之前連接到附件,並且bam!吞下例外!

+0

更新:我向製造商報告了這個錯誤,但我沒有聽到任何迴應。希望他們認真對待並保持沉默。 – 2013-06-12 15:22:04

+0

理想情況下,圖書館應重新拋出異常。 – 2013-10-17 12:06:36