注意:請參閱問題底部的更新,我設法進一步調試。Objective-C無法識別的選擇器+用MagicalRecord初始化CocoaPod
我相信這是我的項目設置的問題,但我不知道要看,因爲沒有編譯錯誤是什麼。
我有MagicalRecord 2.1(當前的穩定),包括在具有的CocoaPods管理IT項目。我沒有更改CocoaPods的任何構建設置,它完全管理我的其他依賴關係,迄今爲止我還沒有任何問題。
我已經加入#import <MagicalRecord/CoreData+MagicalRecord.h>
我App-Prefix.pch
文件,Xcode是我提供的所有符號的建議我希望有一個正確的設置。我沒有收到任何編譯器錯誤,所以我只能假設CocoaPods已成功將MR構建到庫中,並且我已成功將其導入到我的代碼中。
問題是當我在我的應用程序委託初始化MagicalRecord:
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
[MagicalRecord setupCoreDataStack];
//... other code
}
初始化幾乎要運行的第一個代碼,沒有別的,已運行這將這場衝突。
此行掛起,沒有什麼行後執行。我設法追蹤了掛起發生的地方。將消息傳遞給MagicalRecord
正在導致該類調用+initialize
,並且這不起作用。更具體地說,在初始化方法中調用的self
上的任何方法都會導致引發unrecognized selector
異常。
有兩件怪事關於這個問題,據我可以看到:
- 爲什麼不能找到方法實現?
- 爲什麼會導致它掛?
我不太瞭解Objective-C如何使用初始化方法,它是否會在引發異常時掛起?
下面是當發生異常堆棧跟蹤:
frame #0: 0x00007fff93a2e3c5 libobjc.A.dylib`objc_exception_throw
frame #1: 0x00007fff996dc31a CoreFoundation`+[NSObject(NSObject) doesNotRecognizeSelector:] + 186
frame #2: 0x00007fff996341ee CoreFoundation`___forwarding___ + 414
frame #3: 0x00007fff99633fd8 CoreFoundation`_CF_forwarding_prep_0 + 232
frame #4: 0x000000010004e32c River`+[MagicalRecord initialize] + 92 at MagicalRecord.m:89
frame #5: 0x00007fff93a25236 libobjc.A.dylib`_class_initialize + 310
frame #6: 0x00007fff93a250f3 libobjc.A.dylib`prepareForMethodLookup + 164
frame #7: 0x00007fff93a24eef libobjc.A.dylib`lookUpMethod + 71
frame #8: 0x00007fff93a232fc libobjc.A.dylib`objc_msgSend + 188
frame #9: 0x0000000100001d36 MyApp`-[AppDelegate applicationDidFinishLaunching:] + 86 at AppDelegate.m:46
任何幫助,包括技巧,我可以嘗試進一步調試它,是極大的讚賞。
更新:
刪除我導出的數據目錄後,該方案未能鏈接到吊艙。我相信在添加MagicalRecord之後,Xcode無法構建Pod,並鏈接到它的舊版本(可能是錯誤的,我不確定)。
這似乎是一個Xcode和/或CocoaPods問題。我正在努力研究如何讓它正確地構建Pod,但我不是CocoaPods或Xcode構建設置的專家,所以我不確定我會得到多遠。
更新2:
有爲在Xcode和項目設置有問題,它是用較低波德庫鏈接,並且只有導出的數據被刪除後,引起的問題。現在我回到了第一個無法識別的選擇器問題。
看起來像你打電話或MagicalRecord本身的問題。 –
這是我想過的,但是看到沒有人報告過這個問題,我懷疑這是我的項目設置的問題。但是我對Objective-C內部知識不夠了解,不知道爲什麼它不能找到這些方法。 – danpalmer