私のアプリでBookViewController
は、本のページを表示してアニメーション化するMainMenuViewController
クラスと、ユーザーが読むことができる本のセットを表示するクラスを作成しました。
後者のクラスでは、ユーザーが書籍の 1 つをタップすると、 の完全に新しいインスタンスを作成する関数が呼び出されますBookViewController
が、何らかの理由でインスタンスはその状態を維持します (つまり、ユーザーが中断したページから再開します)。
nilに設定するとどうなりますか?ここで何が欠けていますか?(私はARCを使用していることに注意してください)。
MainMenuViewController.m
@interface MainMenuViewController ()
@property (strong) BookViewController *bookViewController;
@end
@implementation MainMenuViewController
@synthesize bookViewController;
-(void)bookTapped:(UIButton *)sender{
NSString *bookTitle;
if(sender == book1button) bookTitle = @"book1";
else if(sender == book2button) bookTitle = @"book2";
bookViewController = nil;
bookViewController = [[BookViewController alloc] initWithBookTitle:bookTitle];
[self presentViewController:bookViewController animated:YES completion:nil];
}
BookViewController.h
@interface BookViewController : UIViewController
-(id)initWithBookTitle:(NSString *)bookTitle;
@end
BookViewController.m
@implementation BookViewController
-(id)initWithBookTitle:(NSString *)theBookTitle{
self = [super init];
if(self){
bookTitle = [NSString stringWithFormat:@"%@", theBookTitle];
[self setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
NSLog(@"init a BookViewController with bookTitle: %@", bookTitle);
}
return self;
}
編集1:bookTapped:
本がタップされ、呼び出され、コンソールが常に出力
するたびに:
2012-08-31 16:29:51.750 AppName[25713:c07] init a BookViewController with bookTitle: book1
の新しいインスタンスBookViewController
が作成されている場合、なぜ古いインスタンスが返されているように見えるのでしょうか?
編集 2:NSLog(@"bookViewController %@",bookViewController);
行の直前
に挿入 しました[self presentViewController:bookViewController
。コンソール出力は次のとおりです。
2012-08-31 16:37:41.426 Henry[25784:c07] bookViewController <BookViewController: 0x6a21540>
2012-08-31 16:38:23.321 Henry[25784:c07] bookViewController <BookViewController: 0xe425540>
2012-08-31 16:38:53.393 Henry[25784:c07] bookViewController <BookViewController: 0x6839330>