Cocos2D在Xcode7和iOS 9.2上IMP调用出错

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)



原来的代码一直在Xcode6.4上和iOS 8.4上运行,没有什么问题.

但是在转至Xcode7.2上在iOS9.2上运行后,以下方法中出现错误:

//执行一个可变方法
-(id)invokeSelectorNamed:(NSString *)selectorName{
    SEL selector = NSSelectorFromString(selectorName);
    IMP imp = [self methodForSelector:selector];
    id (*func)(id,SEL) = (void*)imp;
    return func(_gameScene.curMapNode,selector);
}

错误类型为i386通用保护错误.

项目中有多处会调用以上方法,而且传入的selectorName是不同的.后来调试发现只有某些selector调用时会出错,而另外一些从不出错.

仔细检查出错的那些selector代码,发现这些代码不返回值,而func的原型中是返回值的.

由此可见在Xcode7.2中加强了IMP调用的检查,函数原型不一致,哪怕仅仅是返回值不一致时,调用都会出错.

知道原因解决也很简单了,就是让每一个函数原型一致,哪怕返回nil都可以:

(NSString*)someFunc{
    //原代码
    return nil;
}
时间: 2024-12-04 00:01:10

Cocos2D在Xcode7和iOS 9.2上IMP调用出错的相关文章

求个能在IOS,Android上播放FLV视频的代码

问题描述 求个能在IOS,Android上播放FLV视频的代码 查了很多资料,测试了很多插件,PC端播放无压力,有些是Android可以,IOS不可以的,糟糕透了,请问下各位大牛们,怎么在移动WEB端自由的播放FLV视频 解决方案 iOS doesn't have the correct codecs to play an FLV. It needs to be reencoded as a .mp4 or .mov file. Something that iOS can actually p

ios-html5能代替IOS和安卓上的原生程序吗?

问题描述 html5能代替IOS和安卓上的原生程序吗? html5能代替IOS和安卓上的原生程序吗? 看网上很多人讨论这个? 解决方案 不能 受权限限制,调用不了硬件,比如手电筒 或读取联系人信息等 解决方案二: 要看什么类型的程序.HTML5非常适合跨平台,不需要安装和部署,也不需要从app store下载,对于大多数应用来说,它都是一个理想的选择.同时html5对本地资源的访问比以前也有了很大的进步.但是在那些深度需要和本地系统交互以及对性能有要求的场合,它还是不如原生的应用,比如游戏. 解

iOS设置UIButton上字体的对齐方式/大小、颜色

iOS设置UIButton上字体的对齐方式/大小.颜色 设置UIButton上字体的对齐方式,不是用: [payWayButton.titleLabel setTextAlignment:UITextAlignmentCenter]; 而是用: [payWayButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; 设置UIButton的文字显示位置.字体的大小.字体的颜色 btn.frame

swift在IOS应用图标上添加提醒个数的方法_Swift

在应用图标右上角添加消息数提醒,可以很方便的告知用户该应用中有无新消息需要处理.下面用xcode 7.3.1来简要说明一下如何用swift语言进行此功能的实现. 1.修改 AppDelegate.swift // // AppDelegate.swift // RainbowDemo // // Created by Jackwang on 16/8/17. // Copyright 2016年 Jackwang . All rights reserved. // import UIKit @U

《Cisco IPv6网络实现技术(修订版)》一2.4 在Cisco IOS软件技术上配置IPv6

2.4 在Cisco IOS软件技术上配置IPv6 Cisco IPv6网络实现技术(修订版)路由器可用的Cisco IOS软件技术支持部署和管理IPv6网络所必需的大部分IPv6协议特征.本节考察Cisco IOS软件技术所实现的IPv6特征.这些特征为启用IPv6.在网络接口上激活IPv6和在NDP(邻居发现协议)内配置机制如ARP替代.无状态自动配置.前缀通告.DAD(重复地址检测)和前缀重新编址等功能所必需的.第3章讲解NDP.无状态自动配置.前缀通告.DAD和前缀重新编址. 本节重点是

ios-关于IOS协议代理方法自动调用问题?

问题描述 关于IOS协议代理方法自动调用问题? 各位大牛好, 想问一个关于IOS协议代理的问题: 是否通过遵守某个协议,实现了其中的方法,对于这些方法来说,大多数情况下是 视图对象对其进行自动调用的吗? 例如:当表格不知道自己的行高,就去找实现了相关方法的代理?找它实现的相关方法 来自动获得行高? 小弟不太理解代理与协议方面的知识,希望可以有大牛解答,谢谢. 解决方案 你理解的不错,的确是这样,但是少了一步.除了遵守协议,实现方法之外,还要把自身设置成被委托对象.....delegate =se

iOS开发之用javascript调用oc方法而非url_IOS

先来看看如何在项目中的webview上面点击一个按钮,就能达到调用oc代码 上面的这个页面是webview里面嵌套的一个项目的网页,打印订单点击之后(点击事件是一个js方法),需要调用oc里面集成好的蓝牙打印机功能,来完成打印. 所以这里只能用js代码来直接调用oc代码. 1.首先创建一个iOS类,因为这里一般都需要安卓端做一套,iOS端做一套,所以一般这样命名以示区别 .h #import <Foundation/Foundation.h> #import <JavaScriptCor

new-ASP.NET视频上传功能出错谁能帮我解决一下

问题描述 ASP.NET视频上传功能出错谁能帮我解决一下 using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.Web

上传ftp出错 请帮忙-上传ftp出错,刚刚提问写错了,请帮忙

问题描述 上传ftp出错,刚刚提问写错了,请帮忙 strm = reqFTP.GetRequestStream(); strm.Write(buff, 0, buff.Length); strm.Dispose(); strm.Close(); 到了strm.Dispose();时就报错: The remote server returned an error: (550) File unavailable (e.g., file not found, no access). 解决方案 You