Objective c 使用64位arm64生成时obj_msgSend函数指针崩溃

Objective c 使用64位arm64生成时obj_msgSend函数指针崩溃,objective-c,ios7,crash,64-bit,arm64,Objective C,Ios7,Crash,64 Bit,Arm64,事实上,我的原始代码在Xcode 5.0.2上运行良好,也非常适合发送到App Store,即: objc_msgSend(self.target, self.successAction, category); 该行导致Xcode5.1 beta5崩溃。我找到了修复崩溃的解决方案: 在使用推荐的解决方案时,我使用Xcode 5或Xcode 5.1beta在设备(iPhone 5s)或模拟器(32位或64位)上进行测试都没有问题。构建设置中的架构设置是Xcode 5中的“标准架构(armv7,

事实上,我的原始代码在Xcode 5.0.2上运行良好,也非常适合发送到App Store,即:

objc_msgSend(self.target, self.successAction, category);
该行导致Xcode5.1 beta5崩溃。我找到了修复崩溃的解决方案:

在使用推荐的解决方案时,我使用Xcode 5或Xcode 5.1beta在设备(iPhone 5s)或模拟器(32位或64位)上进行测试都没有问题。构建设置中的架构设置是Xcode 5中的“标准架构(armv7,armv7s)”和“标准架构(armv7,armv7s,arm64)”

然而,我的新版本的应用程序今天就可以在app Store上出售了。而且它在安装的每台设备(iPhone 5s、5、4s)上都会崩溃(根据Crashlytics报告)。
由于我没有使用Xcode(build to real device)获得崩溃,我不知道在苹果审查之前是否解决了问题。

最后,我现在可以重现崩溃。只需编辑构建方案并将“runyourappname.app”从调试更改为发布

在我能够复制这个bug之后,我知道如何修复它。因为我的选择器函数类型是void(不返回任何内容),所以我不应该只复制问题的内容(使用“id”)

通过改变:

id (*response)(id, SEL, id) = (id (*)(id, SEL, id)) objc_msgSend;
response(self.target, self.successAction, category);
致:

它修复了!!或一行代码,因为:


天哪,你真是个巫师!不知道你是怎么想出来的,但它确实有效!(非常感谢你)
id (*response)(id, SEL, id) = (id (*)(id, SEL, id)) objc_msgSend;
response(self.target, self.successAction, category);
void (*response)(id, SEL, id) = (void (*)(id, SEL, id)) objc_msgSend;
response(self.target, self.successAction, category);
((void(*)(id, SEL, id))objc_msgSend)(self.target, self.successAction, category);