我刚刚将iOS 5项目移至iOS 6环境(因为Apple强制要求支持4英寸设备兼容性),现在我在将UIViewController
推送到{时遇到了一些问题{1}}。
在我推送自定义UINavigationController
后,我的用户界面会阻塞5到20秒,这只是在我第一次推送自定义UIViewController
时。如果我弹出我的UIViewController
并再次推送它,则没有延迟或UI阻止。
以下是发生的事情;
首先我从UITableViewController的didSelectRowAtIndexPath推送我的UIViewController(自定义初始化工作正常,没有问题)
UIViewController
我正在记录所有内容(我清除了CampaignDetailViewController *detailViewController = [[CampaignDetailViewController alloc] initWithProduct:selectedProduct];
[self.navigationController pushViewController:detailViewController animated:YES];
,viewDidLoad
和viewWillAppear
中的所有代码,这意味着推送控制器只应加载nib)
推送viewDidAppear
;
UIViewController
调试程序日志;
- (id)initWithProduct:(Product *)selectedProduct
{
NSLog(@"starting init");
self = [super initWithNibName:@"CampaignDetailViewController" bundle:nil];
NSLog(@"nib loaded");
if (self) {
self.navigationItem.title = selectedProduct.name;
self.product = selectedProduct;
}
NSLog(@"finishing init");
return self;
}
- (void)viewDidLoad
{
NSLog(@"starting viewdidload");
[super viewDidLoad];
NSLog(@"finishing viewdidload");
}
- (void)viewWillAppear:(BOOL)animated
{
NSLog(@"view will appear");
}
- (void)viewDidAppear:(BOOL)animated
{
NSLog(@"view did appear");
}
viewWillAppear和viewDidAppear之间有超过30秒的延迟。
更多信息
2013-05-03 12:33:49.678 my-app[1429:707] starting init
2013-05-03 12:33:49.680 my-app[1429:707] nib loaded
2013-05-03 12:33:49.683 my-app[1429:707] finishing init
2013-05-03 12:33:49.808 my-app[1429:707] starting viewdidload
2013-05-03 12:33:49.855 my-app[1429:707] finishing viewdidload
2013-05-03 12:33:49.861 my-app[1429:707] view will appear
2013-05-03 12:35:28.501 my-app[1429:707] view did appear
并删除了nib文件,没有任何改变。 答案 0 :(得分:4)
两个提示:
1 - 这个问题是在模拟器上还是在真实设备上发生的?我在模拟器上经历了许多意想不到的延迟。
2 - 记得打电话
[super viewWillAppear:animated];
和
[super viewDidAppear:animated];
在紧急情况下。
来自Apple文档:
如果覆盖此方法,则必须在实施中的某个时刻调用super。
答案 1 :(得分:0)
在块内执行UI代码时要小心,这应该在主线程内运行!如果不这样做,您可能会受到这种行为的影响,或者更糟糕的是因为UIKit不是线程安全的。
__weak CurrentViewController *wSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
[wSelf.navigationController pushViewController:wSelf.someController animated:YES];
});
答案 2 :(得分:0)
我发现了这个问题,我遇到了同样的问题,这是一个非常隐蔽的错误。我升级了我的项目,并且一些.xib文件未正确升级。在界面构建上选择.xib并检查项目部署目标是否为最后一个,并打开为默认项目(我的旧版本停留在旧版本,其余部分已更新)!
答案 3 :(得分:0)
在我的情况下,问题是UILabel
带阴影。