我刚刚将我的 iOS 5 项目迁移到 iOS 6 环境(因为 Apple 强制要求支持 4 英寸设备兼容性),现在我在UIViewController
推动UINavigationController
.
在我推送我的自定义之后UIViewController
,我的用户界面会阻塞 5 到 20 秒,只有当我UIViewController
第一次推送该自定义时。如果我弹出UIViewController
并再次推送它,则没有延迟或 UI 阻塞。
这是发生的事情;
首先,我从 UITableViewController 的 didSelectRowAtIndexPath 推送我的 UIViewController(自定义初始化工作正常,没有问题)
CampaignDetailViewController *detailViewController = [[CampaignDetailViewController alloc] initWithProduct:selectedProduct];
[self.navigationController pushViewController:detailViewController animated:YES];
比我记录一切(我清除了所有代码viewDidLoad
,viewWillAppear
和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");
}
调试器日志;
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
viewWillAppear 和 viewDidAppear 之间有超过 30 秒的延迟。
更多信息
- 我尝试使用常规
init
并删除了 nib 文件,没有任何改变。 - 在 pushViewController 和加载 UIViewController 之间没有加载任何内容。
- 这个问题发生在我的 iPhone 4 - iOS 5 设备上。在 iOS 5 和 6 模拟器上一切正常,在我的 iPhone 5 - iOS 6 设备上也能正常工作。
- 我也在我项目的其他部分推送其他视图控制器,但这个 UIViewController 似乎是唯一的问题。
- 视图控制器被推送到主线程上,因此视图控制器被加载到主线程上
- 在此阻塞期间,XCode (4.6.1) 也被阻塞并且也没有响应