我连接到呈现的视图控制器的 init、loadView、viewDidLoad、viewWillAppear:、viewDidAppear:、viewDidUnload 和 dealloc 方法以注销相关的时间信息。
但是发现是否presentModalViewController:animated:
或presentViewController:animated:completion:
将导致呈现的视图控制器的两个实例,其中一个将很快被销毁,而屏幕上没有出现任何内容(尚未触发 loadView 和 next 方法)。
它是一个错误还是 iOS 的视图控制器转换就是这样工作的?
这是日志信息,WDIMMIndItemEditViewController 是呈现的视图控制器,WDIMMmainScreenViewController 是呈现的视图控制器:
2012-09-29 16:10:02.615 ideaCal[23450:707]<WDIMMindItemEditViewController:0x2b5260>:编辑视图控制器将初始化
2012-09-29 16:10:02.639 ideaCal[23450:707]<WDIMMindItemEditViewController:0x2b5260>:编辑视图控制器已初始化
2012-09-29 16:10:02.641 ideaCal[23450:707] < WDIMMindItemEditViewController: 0x2b94d0> :编辑视图控制器将初始化
2012-09-29 16:10:02.645 ideaCal[23450:707]<WDIMMindItemEditViewController:0x2b94d0>:编辑视图控制器已初始化
2012-09-29 16:10:02.835 ideaCal[23450:707] < WDIMMmainScreenViewController: 0x27c790> 将呈现模态视图控制器:< WDIMMIndItemEditViewController: 0x2b5260>
2012-09-29 16:10:02.841 ideaCal[23450:707]<WDIMMindItemEditViewController:0x2b5260>:编辑视图控制器加载视图
2012-09-29 16:10:02.910 ideaCal[23450:707]<WDIMMindItemEditViewController:0x2b5260>:编辑视图控制器已加载视图
2012-09-29 16:10:02.912 ideaCal[23450:707] < WDIMMIndItemEditViewController: 0x2b5260> :编辑视图控制器的视图将出现
2012-09-29 16:10:03.297 ideaCal[23450:707] < WDIMMmainScreenViewController: 0x27c790> 将呈现模态视图控制器:< WDIMMindItemEditViewController: 0x2b94d0>
2012-09-29 16:10:03.302 ideaCal[23450:707]<WDIMMindItemEditViewController:0x2b94d0>:编辑视图控制器将解除分配
2012-09-29 16:10:03.340 ideaCal[23450:707] <WDIMMindItemEditViewController: 0x2b94d0>:编辑视图控制器结束了释放
2012-09-29 16:10:03.702 ideaCal[23450:707] < WDIMMindItemEditViewController: 0x2b5260> :编辑视图控制器的视图出现
2012-09-29 16:10:05.434 ideaCal[23450:707] <WDIMMmainScreenViewController: 0x27c790> 结束当前模态视图控制器:<WDIMMindItemEditViewController: 0x2b5260>
这是我的演示代码:
- (IBAction)slidingMenuGetPressed:(WZUICircularPagingControlViewSlidingMenu *)slidingMenu event:(UIEvent *)event
{
WDIMEditViewController * editModalViewController = nil;
if ([slidingMenu.identifier isEqualToString:NEW_MIND_ITEM]) {
editModalViewController = [[WDIMMindItemEditViewController alloc] init];
}
if ([slidingMenu.identifier isEqualToString:NEW_PROJECT]) {
editModalViewController = [[WDIMMindItemEditViewController alloc] init];
}
if ([slidingMenu.identifier isEqualToString:NEW_TAG]) {
editModalViewController = [[WDIMTagEditViewController alloc] init];
}
dispatch_queue_t snapshotQueue = dispatch_queue_create("com.WeZZardDesign.ScreenSnapshotQueue", NULL);
dispatch_async(snapshotQueue, ^{
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * snapshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
editModalViewController.backgroundImage = snapshot;
NSManagedObjectContext * workingContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
workingContext.parentContext = self.database.managedObjectContext;
editModalViewController.preference = self.preference;
editModalViewController.dataSource = self;
editModalViewController.delegate = self;
editModalViewController.workingContext = workingContext;
NSLog(@"%@ will present modal view controller: %@", self, editModalViewController);
[self presentViewController:editModalViewController animated:YES completion:^{
NSLog(@"%@ ended present modal view controller: %@", self, editModalViewController);
}];
});
});
dispatch_release(snapshotQueue);
}
presentModalViewController:animated:
而且我的方法没有任何改变presentViewController:animated:completion:
。