0

UIViewControllersの継承に取り組んでいますが、問題が発生しています。これが私が使用したViewControllerのリストとそのフローです。

ヘッダーファイル

MainViewController : UIViewController {

}

CustomerTicketViewController : UIViewController {

}
@property (nonatomic, retain) NSArray *listTickets;

CustomerEditTicketViewController : CustomerTicketViewController {

}

実装ファイル

@implementation MainViewController

- (void)loadCustomer {
        CustomerTicketViewController *customerTicketViewController = [[CustomerTicketViewController alloc] initWithNibName:@"CustomerTicketViewController" bundle:nil];
        [customerTicketViewController setListTickets:myTickets];
        [self presentModalViewController:customerTicketViewController animated:YES];
        [customerTicketViewController release];
}

@end

@implementation CustomerTicketViewController

    - (void)editCustomer {
        CustomerEditTicketViewController *customerEditTicketViewController = [[CustomerEditTicketViewController alloc] initWithNibName:@"CustomerEditTicketViewController" bundle:nil];
        NSLog(@"ParentView.listTickets: %@", listTickets);
        [self presentModalViewController:customerEditTicketViewController animated:NO];
        [customerEditTicketViewController release];
    }

    @end

@implementation CustomerEditTicketViewController

- (void)viewDidLoad {
    NSLog(@"listTickets: %@", listTickets);
    NSLog(@"super.listTickets: %@", super.listTickets);
    NSLog(@"self->listTickets: %@", self->listTickets);
    NSLog(@"self.listTickets: %@", self.listTickets);
}

@end

サブクラスのログはnullを出力しますが、私の理解によれば、ParentViewと同じ値を出力する必要があります。どこか間違っていたら教えてください。

    ParentView.listTickets: (
    "<CustomerTicket: 0x4c75d90>",
    "<CustomerTicket: 0x4c76310>"
)

listTickets: (null)
super.listTickets: (null)
self->listTickets: (null)
self.listTickets: (null)
4

2 に答える 2

3

edit View Controller は別のオブジェクトです。スーパークラスから継承するのは、プロパティの値ではなく、listTickets という配列プロパティがあるという事実だけです。これは、オブジェクト指向プログラミングの (?) 基本的なポイントです。

最初のものを作成するときと同じように、View Controller を作成した後に値を設定する必要があります。

CustomerEditTicketViewController *customerEditTicketViewController = [[CustomerEditTicketViewController alloc] initWithNibName:@"CustomerEditTicketViewController" bundle:nil];

customerEditTicketViewController.listTickets = self.listTickets;
于 2012-05-17T05:47:30.037 に答える
0

ビューコントローラのeditCustomerメソッドは、子コントローラのプロパティに割り当てを行うことはありません。

于 2012-05-17T06:19:20.547 に答える