0

表示されたビュー コントローラーの 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:

4

1 に答える 1

0

上記のコメントから、とは同じ内容の2つの文字列であることが明らかになりましたNEW_MIND_ITEMNEW_PROJECTポインタではなく内容を比較するため isEqualToString、2つの「if」ブロックが実行され、の2つのインスタンスが作成されますWDIMMindItemEditViewController。別の文字列を使用すると、問題が解決するはずです。

于 2012-09-30T07:08:03.853 に答える