Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 方法在从另一个类调用时不起作用_Ios_Objective C_Xcode_Uitableview_Nsmutablearray - Fatal编程技术网

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

Ios 方法在从另一个类调用时不起作用,ios,objective-c,xcode,uitableview,nsmutablearray,Ios,Objective C,Xcode,Uitableview,Nsmutablearray,我试图从SecondViewController.m调用addObjectToArray方法。NSLog可以工作,但是我不能将“foo”添加到_myArray(一个NSMutableArray,它是UITableView的数据源)。如果我在viewDidLoad中调用[self-addObjectToArray],那么它可以正常工作 FirstViewController.m -(void)addObjectToArray { [_myArray addObject:@"foo"];

我试图从SecondViewController.m调用addObjectToArray方法。NSLog可以工作,但是我不能将“foo”添加到_myArray(一个NSMutableArray,它是UITableView的数据源)。如果我在viewDidLoad中调用[self-addObjectToArray],那么它可以正常工作

FirstViewController.m

-(void)addObjectToArray {
    [_myArray addObject:@"foo"];
    [_myTableView reloadData];
    NSLog(@"it works");
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"identifier"]) {
        FirstViewController *controller = [segue destinationViewController];
        [controller addObjectToArray];
    }
}
SecondViewController.m

-(void)addObjectToArray {
    [_myArray addObject:@"foo"];
    [_myTableView reloadData];
    NSLog(@"it works");
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"identifier"]) {
        FirstViewController *controller = [segue destinationViewController];
        [controller addObjectToArray];
    }
}

根据Nofel Mahmood的评论,您正在创建两个独立的
FirstViewController
实例,一个名为FirstViewController(从故事板创建),另一个名为myObject(使用“new”方法创建)。然后在myObject上调用
addObjectToArray
方法,但您将显示firstViewController。你的myObject本质上是多余的。修改您的代码如下:

-(IBAction) doSomething:(id)sender {
FirstViewController *firstViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"firstViewController"];

[firstViewController addObjectToArray];

[self presentViewController:firstViewController animated:YES completion:nil];  
}

编辑

由于您希望返回到FirstViewController的现有实例,因此需要使用展开序列。这里有一个详细的解释:,但在您的情况下:

在FirstViewController中,添加一个新方法:

- (IBAction)unwindToFirst:(UIStoryboardSegue *)unwindSegue {
    [self addObjectToArray];
}
然后在情节提要中,按住ctrl键从SecondViewController(或者如果愿意,从视图中的特定控件)拖动到SecondViewController下方栏中的绿色“退出”图标。然后,您应该在出现的小弹出窗口中选择
unwindToFirst
操作


如果您想从代码中使用此展开序列,请在故事板左侧的文档大纲中查找刚刚创建的展开序列。选择此选项,然后在右侧的属性检查器中添加标识符。然后,您可以使用普通的
[self-PerformRequestWithIdentifier:…]
方法从代码中调用此segue。

您在名为myObject的FirstViewController实例上调用方法addObjectToArray,但您正在演示FirstViewController?我假设您正在使用故事板,那么为什么要使用new初始化myObject?我应该如何初始化它?(我对目标C非常陌生)通过使用[self.storyboard instanceeviewcontrollerwhiteIdentifier:@“identifierNameHere”];对不起,我不明白。我使用的是故事板,但按下按钮时我需要按下一个视图控制器,我不想使用Segue。你犯了一个错误,强烈表明你并不真正理解“对象”的概念。我已经这样做了,但它仍然没有向阵列添加任何内容。添加对象到阵列中的NSLog是否有效?如果是,请尝试使用
NSLog(@“Array is%@”,_myArray];
以查看数组中的实际内容。另外,在哪个FirstViewController方法中创建_myArray实例?由于某种原因,数组为空,即使我在viewDidLoad中添加了一个对象在FirstViewController中。这里存在问题-viewDidLoad在addObjectToArray运行时没有运行。我将覆盖
initWithCoder:
,在storyboard InstanceEviewController方法运行时调用,并在该方法中创建_myArray。