注意:请参阅问题底部的更新,我已经设法进一步调试。
我认为这是我的项目设置的一个问题,但我不确定要看什么,因为没有编译错误。
我在项目中包含了MagicalRecord 2.1(当前稳定版),CocoaPods管理它。我没有更改CocoaPods的任何构建设置,它完全管理我的其他依赖项,到目前为止我还没有任何问题。
我已将#import <MagicalRecord/CoreData+MagicalRecord.h>
添加到我的App-Prefix.pch
文件中,Xcode正在为我提供所有符号建议,我希望通过正确的设置。我没有得到任何编译器错误,因此我只能假设CocoaPods已成功将MR构建到库中,并且我已成功将其导入到我的代码中。
当我在我的应用程序委托中初始化MagicalRecord时出现问题:
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
[MagicalRecord setupCoreDataStack];
//... other code
}
初始化几乎是第一个要运行的代码,并且没有其他任何已经运行的代码与此冲突。
该行挂起,执行该行后没有任何内容。我已设法追踪挂起的位置。将消息传递给MagicalRecord
会导致该类调用+initialize
,但这不起作用。更具体地说,在initialize方法中调用的self
上的任何方法都会导致抛出unrecognized selector
异常。
据我所知,有两个奇怪的事情:
我对Objective-C如何使用initialize方法知之甚少,是否会在抛出异常时挂起?
以下是发生异常时的堆栈跟踪:
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
对此有任何帮助,包括我可以尝试进一步调试的技巧,非常感谢。
的更新
删除我的Derived Data目录后,该程序无法链接到Pod。我相信Xcode在我添加了MagicalRecord之后无法构建Pod,并且链接到它的旧版本(可能是错误的,我不确定)。
这似乎是一个Xcode和/或CocoaPods问题。我正在试图弄清楚如何正确地构建Pod,但我不是CocoaPods或Xcode构建设置的专家,所以我不确定我能得到多远。 < / p>
更新2:
是Xcode和项目设置的一个问题,它与较旧的Pod库链接,并且只在删除派生数据后导致问题。现在我回到了无法识别选择器问题的方块1。
答案 0 :(得分:9)
解决方案是使用Pod库在产品设置中的其他链接器标志设置中使用-all_load
链接器标志。
当您链接到pod库时,clang会删除未使用的符号,除非您这样做,并且由于您的应用程序未在任何地方调用+ swizzleShorthandMethods,因此它会被删除。
答案 1 :(得分:2)
对不起,我从来没有解决这个问题,看起来没有人知道它为什么不起作用。我试图与Magical Record的开发人员合作,但最终答案是不使用CocoaPods并手动添加代码。我希望我能更好地解决这个问题,但我没有时间花几天时间调试这个问题,我认为我对CocoaPods,Xcode编译过程和Objective-C运行时的了解不够调试它。
答案 2 :(得分:0)
我手动添加了MagicalRecord
库并遇到了此错误。我的问题出在.pch文件中,因为MagicalRecord/CoreData+MagicalRecord.h
的导入高于定义:#define MR_SHORTHAND
。
将上面的定义置于导入后解决了我的问题。
答案 3 :(得分:0)
在Podfile
更新MagicalRecord参考资料中,如下所示:
pod 'MagicalRecord/Shorthand', '~> 2.2'
它会在#define MR_SHORTHAND
文件中包含Pods/Pods-MagicalRecord-prefix.pch
。