Ios 方法在从另一个类调用时不起作用
我试图从SecondViewController.m调用addObjectToArray方法。NSLog可以工作,但是我不能将“foo”添加到_myArray(一个NSMutableArray,它是UITableView的数据源)。如果我在viewDidLoad中调用[self-addObjectToArray],那么它可以正常工作 FirstViewController.mIos 方法在从另一个类调用时不起作用,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"];
-(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。