iOS开发问题解决方案合集
2016-09-08 15:34
423 查看
这是我在开发过程中遇到的一些问题的整理,会定期做更新,希望对大家有所帮助^_^
如果在新建的UIWindow下添加UITextField或者UITextView后,长按此控件弹出来的放大镜不是显示当前文本的放大模式,而是显示了底层的Window的内容。
环境:
iOS7+ 真机/模拟器
分析:
由于Window的层次导致,默认的windowLevel是1。如果层次相同则会导致显示不正常。
解决:
创建新的UIWindow时将windowLevel调高一个层次则可解决问题。如:
_window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
_window.windowLevel = UIWindowLevelNormal + 1;
真机调试使用GameCenter进行用户授权会报告错误: Error Domain=GKErrorDomain Code=15 "无法完成所请求的操作,因为 Game Center 未识别此应用程序。"
环境:
iOS8 真机
分析:
有可能是几种情况导致:
应用的BundleID与ItunesConnect上配置的BundleID不匹配。
iOS设备中的GameCenter没有开启沙盒模式。
解决:
登陆itunesConnect。检查App中设置的BundleID,如果发现和工程中的BundleID不一致,请修改工程中的BundleID。
进入设备的设置 -> Game Center。查看“开发者”一栏下面的沙盒的开关是否开启,如果没有开启点击打开。
使用UIWebView的 stringByEvaluatingJavaScriptFromString方法时,在被执行的JS方法中不能有alert出现,否则可能会导致主线程阻塞。如:
OC中:
JS中:
解决方法:
如果确实需要alert,则使用setTimeout方法执行。JS修改如下:
当实体A与实体B之间是一对多关系时,为实体A添加一个Relationship关联实体B。当从实体A移除实体B的关系时,即使保存成功也无法正真移除与实体B的关联关系。
解决方法:
为实体B提供一个逆向Relationship关联到实体A后,移除关系功能正常。
弹出一个新建的UIWindow作为keyWindow显示界面后,在释放该Window后,再次获取keyWindow返回nil。代码如下:
环境:
iOS 9
解决:
UIWindow及其子类如果为keyWindow,则必须在dealloc之前调用resignKeyWindow,否则会导致key window丢失。则上面代码可以改为:
使用XCode运行调试App时,弹出提示框提示“the application could not be verified”。无法运行应用。
解决:
由于项目的Bundle Identifier包含非法字符串导致(可能包含中文)。修改此项为英文字符即可。
真机调试出现:“process launch failed: failed to get the task for process 3835”
原因:
打包证书使用了发布证书导致。
解决方法:
在project的build settings -> Code Signing -> Code Signing Identity中修改调试用的开发者证书即可.
问题1:UITextField和UITextView中长按出来的放大镜无法正常显示内容
现象:如果在新建的UIWindow下添加UITextField或者UITextView后,长按此控件弹出来的放大镜不是显示当前文本的放大模式,而是显示了底层的Window的内容。
环境:
iOS7+ 真机/模拟器
分析:
由于Window的层次导致,默认的windowLevel是1。如果层次相同则会导致显示不正常。
解决:
创建新的UIWindow时将windowLevel调高一个层次则可解决问题。如:
_window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
_window.windowLevel = UIWindowLevelNormal + 1;
问题2:Error Domain=GKErrorDomain Code=15 "无法完成所请求的操作
现象:真机调试使用GameCenter进行用户授权会报告错误: Error Domain=GKErrorDomain Code=15 "无法完成所请求的操作,因为 Game Center 未识别此应用程序。"
环境:
iOS8 真机
分析:
有可能是几种情况导致:
应用的BundleID与ItunesConnect上配置的BundleID不匹配。
iOS设备中的GameCenter没有开启沙盒模式。
解决:
登陆itunesConnect。检查App中设置的BundleID,如果发现和工程中的BundleID不一致,请修改工程中的BundleID。
进入设备的设置 -> Game Center。查看“开发者”一栏下面的沙盒的开关是否开启,如果没有开启点击打开。
问题3:使用UIWebView加载JS脚本时如果调用alert会卡住界面
现象:使用UIWebView的 stringByEvaluatingJavaScriptFromString方法时,在被执行的JS方法中不能有alert出现,否则可能会导致主线程阻塞。如:
OC中:
[webView stringByEvaluatingJavaScriptFromString:@“demo();"];
JS中:
demo () { alert(“test”); }
解决方法:
如果确实需要alert,则使用setTimeout方法执行。JS修改如下:
demo () { setTimeout (function () { alert(“test”); }, 100); }
问题4:CoreData无法移除Relationships的关联对象
现象:当实体A与实体B之间是一对多关系时,为实体A添加一个Relationship关联实体B。当从实体A移除实体B的关系时,即使保存成功也无法正真移除与实体B的关联关系。
解决方法:
为实体B提供一个逆向Relationship关联到实体A后,移除关系功能正常。
问题5:[UIApplication sharedApplication].keyWIndow丢失
现象:弹出一个新建的UIWindow作为keyWindow显示界面后,在释放该Window后,再次获取keyWindow返回nil。代码如下:
//显示Window - (void)showWindow { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.rootViewController = [[UIViewController alloc] init]; [self.window makeKeyAndVisible]; } //关闭Window - (void)closeWindow { self.window = nil; }
环境:
iOS 9
解决:
UIWindow及其子类如果为keyWindow,则必须在dealloc之前调用resignKeyWindow,否则会导致key window丢失。则上面代码可以改为:
- (void)showWindow { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.rootViewController = [[UIViewController alloc] init]; [self.window makeKeyAndVisible]; } - (void)closeWindow { [self.window resignKeyWindow]; self.window = nil; }
问题6:the application could not be verified
现象:使用XCode运行调试App时,弹出提示框提示“the application could not be verified”。无法运行应用。
解决:
由于项目的Bundle Identifier包含非法字符串导致(可能包含中文)。修改此项为英文字符即可。
问题7:Could not launch “xxxxxx”
现象:真机调试出现:“process launch failed: failed to get the task for process 3835”
原因:
打包证书使用了发布证书导致。
解决方法:
在project的build settings -> Code Signing -> Code Signing Identity中修改调试用的开发者证书即可.
相关文章推荐
- iOS开发中按钮多次响应问题解决方案
- 【iOS开发】AsyncSocket长连接粘包问题解决方案
- iOS项目开发键盘弹出遮挡输入框问题解决方案
- iOS开发屏幕适配问题解决方案
- iOS开发之--获取验证码倒计时及闪烁问题解决方案
- iOS开发之共性问题解决方案
- iOS开发之使用CocoaPods更新第三方出现“target overrides the `OTHER_LDFLAGS`……”问题解决方案
- iOS开发之使用CocoaPods更新第三方出现“target overrides the `OTHER_LDFLAGS`……”问题解决方案
- iOS 开发之使用CocoaPods更新第三方出现“HEADER_SEARCH_PATHS `OTHER_LDFLAGS`……”问题解决方案
- 【iOS-Cocos2d游戏开发之十】添加粒子系统特效并解决粒子特效与Layer之间的坐标问题;
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)以及禁止游戏中自动锁屏问题!
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)及禁止自动锁屏问题! 推荐
- 打开键盘遮住View的问题解决方法-IOS开发
- 打开键盘遮住View的问题解决方法-IOS开发
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)以及禁止游戏中自动锁屏问题!
- 【iOS-Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!【11月28日更新解决添加组件Cocos2d动画停止播放的BUG】
- ios开发中解决Base SDK missing问题
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/动画播放出现毛边以及禁止游戏中自动锁屏问题!【2011年12月18日补充】
- 关于Myeclipse的JSP开发一些零散问题解决方案
- 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)以及禁止游戏中自动锁屏问题!