用prepareforsegue传递一个数组

时间:2013-05-20 18:19:10

标签: iphone ios nsarray

我试图通过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了数组计数并发现它为零所以我用这段代码做了一些进一步的检查:< / p>

- (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];
    } 

我得到的数组是空消息。

请帮我解决这个问题

2 个答案:

答案 0 :(得分: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];


}

答案 1 :(得分:2)

当你将segue.destinationViewController分配给你过去编写你之前实例化的人物对象并将数组分配给的人时。

你可能想做这样的事情

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