0

1 つのメソッドを実行すると、ナビゲーション スタック内のビュー コントローラーが失われるという奇妙な問題が発生しています。次のコードでは、viewcontroller の数をナビゲーション スタックに記録します。ビューコントローラーもナビゲーションスタックに記録しています。

NSMutableArray *navigationarray = [[NSMutableArray alloc]initWithArray:self.navigationController.viewControllers];
NSLog(@"Navigation array %@", navigationarray);
NSLog(@"Navigation array count %d", [navigationarray count]);

[self.doneButton.target performSelector:self.doneButton.action withObject:self.doneButton.target];

NSMutableArray *navigationarrayOne = [[NSMutableArray alloc]initWithArray:self.navigationController.viewControllers];
NSLog(@"Navigation array %@", navigationarrayOne);
NSLog(@"Navigation array count %d", [navigationarrayOne count]);

メソッドが呼び出される前は、ナビゲーション スタックには 3 つのビュー コントローラーがあります。ただし、メソッドが実行された後は、ナビゲーション スタックにビュー コントローラーはありません。3 つのビュー コントローラーの dealloc メソッドにブレークポイントを設定したところ、ビュー コントローラーが割り当て解除されていないことがわかりました。この理由は何でしょうか?

現在のクラスはサブクラスABNewPersonViewController化され、self.doneButton.action実行されます

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController
   didCompleteWithNewPerson:(ABRecordRef)person;

サブクラス化されたクラスのメソッドABPersonViewController

4

1 に答える 1

1

navigationController は、そのスタック内のすべてのビューで共有されます。いずれも、navigationController.viewControllers の値を設定できます。新しいビュー コントローラーがナビゲーション スタックに変更を加えているかどうかを確認します。

于 2012-06-08T16:03:45.297 に答える