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(它是 tableview),并且表格上没有显示任何内容,所以我 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];
    } 

我得到数组为空消息。

请帮我解决这个问题

4

2 回答 2

3

为什么不直接从情节提要中分配视图控制器并将数组作为该视图控制器的属性传入,然后再将其添加到堆栈中?即避免使用prepareForSegue

-(void) buttonPressed:(UIButton*) sender
{
  UIStoryBoard *story = [UIStoryboard storyboardWithName:@"Storyboard name"];
  YourViewController *vc = [story instantiateViewControllerWithIdentifier:@"identifier"];

  vc.array = <you array>


[self.navigationController pushViewController:vc animated:YES];


}
于 2013-05-20T18:25:33.843 回答
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 回答