我正在尝试从SecondViewController.m调用addObjectToArray方法。 NSLog工作,但我无法添加" foo"到_myArray(一个NSMutableArray,它是UITableView的数据源)。如果我在viewDidLoad中调用[self addObjectToArray],那么它可以正常工作。
FirstViewController.m
-(void)addObjectToArray {
[_myArray addObject:@"foo"];
[_myTableView reloadData];
NSLog(@"it works");
}
SecondViewController.m
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"identifier"]) {
FirstViewController *controller = [segue destinationViewController];
[controller addObjectToArray];
}
}
答案 0 :(得分:1)
根据Nofel Mahmood的评论,您正在创建两个独立的FirstViewController
实例,一个名为firstViewController(从故事板创建),另一个名为myObject(使用' new&#39创建) ; 方法)。然后在myObject上调用addObjectToArray
方法,但是您呈现firstViewController。你的myObject基本上是多余的。修改您的代码如下:
-(IBAction) doSomething:(id)sender {
FirstViewController *firstViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"firstViewController"];
[firstViewController addObjectToArray];
[self presentViewController:firstViewController animated:YES completion:nil];
}
修改强>
由于您想要返回FirstViewController的现有实例,因此需要使用展开segue。这里有一个详细的解释:what-are-unwind-segues,但在你的情况下:
在FirstViewController中,添加一个新方法:
- (IBAction)unwindToFirst:(UIStoryboardSegue *)unwindSegue {
[self addObjectToArray];
}
然后在你的故事板中,按住Ctrl键从SecondViewController(或者如果你愿意,从视图中的特定控件)拖动到绿色"退出" SecondViewController下方栏中的图标。然后,您应该在显示的小弹出窗口中选择unwindToFirst
操作。
如果您想在代码中使用此展开segue,请查看故事板左侧的Document Outline,了解您刚刚创建的Unwind Segue。选择此项,然后在右侧的属性检查器中添加标识符。然后,您可以使用常规[self performSequeWithIdentifier:...]
方法从代码中调用此segue。