您的位置:首页 > 移动开发 > IOS开发

iOS开发问题解决方案合集

2016-09-08 15:34 423 查看
这是我在开发过程中遇到的一些问题的整理,会定期做更新,希望对大家有所帮助^_^

问题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 问题 解决方案
相关文章推荐