为什么 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
其“myStopsMArray
”NSMutableArray
.
但是在您的 addToFavorites
方法中,您创建了 另一个不同的全新 MyStops
实例 — 您没有 alloc
]/init
你myStopsMArray
属性。因此,在该方法中,myStops.myStopsMArray
仍然是 nil
。
instantiateViewControllerWithIdentifier
每次都创建 returns 新实例!
所以你必须有一个指向那个视图控制器的直接指针。
在当前 class 的头文件中创建一个 属性,例如:
@property (strong, nonatomic) MyStops *myStopsVC;
注意:
如果您当前的 ViewController 已经从 MyStops
提交,请将 strong
更改为 weak
。但是,如果您要从此 vc 转到 push/present MyStops,则将其保留为 strong
指针。
我有一个 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
其“myStopsMArray
”NSMutableArray
.
但是在您的 addToFavorites
方法中,您创建了 另一个不同的全新 MyStops
实例 — 您没有 alloc
]/init
你myStopsMArray
属性。因此,在该方法中,myStops.myStopsMArray
仍然是 nil
。
instantiateViewControllerWithIdentifier
每次都创建 returns 新实例!
所以你必须有一个指向那个视图控制器的直接指针。
在当前 class 的头文件中创建一个 属性,例如:
@property (strong, nonatomic) MyStops *myStopsVC;
注意:
如果您当前的 ViewController 已经从 MyStops
提交,请将 strong
更改为 weak
。但是,如果您要从此 vc 转到 push/present MyStops,则将其保留为 strong
指针。