3

prepareWithSegue を介して配列を渡そうとしていますが、アプリを起動すると null になります

これはコードです:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.destinationViewController isEqual:@"table"]) {
        PersonsViewController *person= [[PersonsViewController alloc]init];
        [person setAnArray:anArray];

        person = segue.destinationViewController;
    }
}

これはsetAnArrayメソッドです:

-(void)setAnArray:(NSMutableArray *)anArray
{
    array = [[NSMutableArray alloc]initWithArray:anArray];
    if (array != nil) {
        NSLog(@"array is copied !!");
    }
}

データはviewController(UINavigation Controllerに埋め込まれている)からPersonViewController(テーブルビュー)に渡され、テーブルには何も表示されないため、配列カウントをNSLoggedし、ゼロを見つけたので、このコードでさらにチェックしました:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
    // Return the number of rows in the section.
    if (array == nil) {
        NSLog(@"array is null");
    }
    else
    {
        NSLog(@"array count is %lu",(unsigned long)[array count]);
        return [array count];
    } 

array is null メッセージが表示されます。

これを修正するのを手伝ってください

4

2 に答える 2

2

segue.destinationViewController を person に割り当てると、以前にインスタンス化して配列を割り当てた person オブジェクトを上書きします。

あなたはおそらくこのようなことをしたい

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.destinationViewController isEqual:@"table"]) {
        [(PersonsViewController *) segue.destinationViewController setAnArray:anArray];
    }
}
于 2013-05-20T18:43:00.430 に答える