表示されたビュー コントローラーの init、loadView、viewDidLoad、viewWillAppear:、viewDidAppear:、viewDidUnload、および dealloc メソッドにフックして、関連するタイミング情報をログアウトしました。
しかし、表示されたビュー コントローラーの 2 つのインスタンスが生成され、そのうちの 1 つが画面に何も表示されずにすぐに破棄されることが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:
。