为什么 NSMutableArray 不工作?

Why isn't NSMutableArray working?

我有一个 class 的 NSMutableArray,在另一个 class 中,我想初始化它并添加各种对象。但问题是 NSMutableArray 没有保留元素。我有以下代码:

 -(void)viewDidLoad
  {
    [super viewDidLoad];
    MyStops *myStops = [self.storyboard instantiateViewControllerWithIdentifier:@"My Stops"];
    myStops.myStopsMArray = [[NSMutableArray alloc] init];
  }

还有这个:

- (void) addToFavourites:(id)sender 
  {
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;

    NSInteger tag = gesture.view.tag;

    UITableViewCell *cell = [stopsTable dequeueReusableCellWithIdentifier:@"cell"];

    MyStops *myStops = [self.storyboard instantiateViewControllerWithIdentifier:@"Mis Paradas"];

    [myStops.myStopsMArray addObject:[stopsArray objectAtIndex:tag]];
 }

在另一个文件中,我声明并合成了 NSMutableArray:

//Header file
@property (nonatomic, retain) NSMutableArray *myStopsMArray;

//Implementation file
@synthesize myStopsMArray;

你能告诉我我做错了什么吗? 谢谢!

您的 MyStops ViewController 有两个不同的实例,这就是原因。

在你viewDidLoad中,你创造了一个MyStops ViewController然后 alloc/init 其“myStopsMArrayNSMutableArray.

但是在您的 addToFavorites 方法中,您创建了 另一个不同的全新 MyStops 实例 — 您没有 alloc ]/initmyStopsMArray属性。因此,在该方法中,myStops.myStopsMArray 仍然是 nil

instantiateViewControllerWithIdentifier 每次都创建 returns 新实例! 所以你必须有一个指向那个视图控制器的直接指针。 在当前 class 的头文件中创建一个 属性,例如:

@property (strong, nonatomic) MyStops *myStopsVC;

注意: 如果您当前的 ViewController 已经从 MyStops 提交,请将 strong 更改为 weak。但是,如果您要从此 vc 转到 push/present MyStops,则将其保留为 strong 指针。