从另一个类调用时方法不起作用

时间:2014-09-28 21:11:34

标签: ios objective-c xcode uitableview nsmutablearray

我正在尝试从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];
    }
}

1 个答案:

答案 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。