2017-08-11 43 views
0

我使用Xcode自動生成的NSManagedObjectSubclass,共4個文件。它們是:[NSManagedObjectSubclass xxx] - 無法識別的selectot發送到實例

Doctor.h, Doctor + CoreDataProperties.h及其實現文件。

Doctor + CoreDataProperties.h文件具有包含屬性「uid」的所有屬性。 @property (nullable, nonatomic, retain) NSNumber *uid; .m文件使用@dynamic uid;

問題 首先,我詢問醫生情況下從數據庫中像這樣(通過使用MagicalRecord框架)

self.doctor = [Doctor doctorWithEasemobAccount:self.chatter withContext:[NSManagedObjectContext MR_defaultContext]]; 

然後我得到了uid通過self.doctor.uid,而有時應用程序可以使用的原因

終止應用程序崩潰是由於未捕獲的異常 'NSInvalidArgumentException' 的,理由是:「 - [醫生UID]:無法識別 選擇器發送到實例0x17428d250'

但它大部分時間運行正常。

有人可以幫我分析一下可能的原因嗎?

回答

0

根據我個人的經驗,NSInvalidArgumentException表示您的實例(在這種情況下爲Doctor)可能是零或不是您想要的類型。

設置斷點並檢查Doctor實例。您還應該處理查詢不返回任何內容的情況。

(旁註:不知道爲什麼你的財產是(nullable, nonatomic, retain),你可能只是想(nonatomic, strong)取決於你的uid使用)

+0

謝謝您的回答。但是,如果實例爲零,它不會拋出異常,並且如果實例不是類型'Doctor'(例如NSNull實例),則該異常應該像' - [NSNull uid]:發送到實例的無法識別的選擇器0x1074be180' 。所以我認爲其原因可能是當[Doctor uid]被調用時(屬性uid被定義在類別中),getter方法未實現。但是我不知道它爲什麼會發生。(PS:屬性(空,非原子,保留)由Xcode自動生成) – JsonKit

+0

類別不能將屬性添加到現有類。除非你的意思是「類擴展名」或「匿名類別」,否則這就是'@interface ClassName()'的地方。編譯器會自動綜合訪問器方法,所以不應該成爲問題。 PS:看起來你可能會運行舊版本的Xcode,因爲'retain'是一箇舊的關鍵字 –

+0

您是否嘗試設置斷點並確保Doctor實例不是零,並且在調試器中可以看到「uid財產? –

相關問題