我在 iOS 中遇到一个非常奇怪的问题。我有两个类 AViewController 和 BViewController。 在 AViewController 中,我有一个类似
的数组@property NsmutableArray *array_one;
我在 prepareforsegue 方法中将一些数据从一个 View Controller 传递到另一个 View Controller 。
if([self.array_one count]>0)
{
viewBController.array_two=self.array_one;
}
然后从 BviewController 我像这样传回数据
-(void)viewWillDisappear:(BOOL)animated
{
int j;
[self.delegate setData:self.array_two];
}
那我就是在用这个方法做这个工作
- (void)setData:(NSMutableArray *)data
{
NSString *string=[NSString stringWithFormat:@"%lu",(long)[data count]];
[self.array_one removeAllObjects];
int i;
for(i=0;i<[string intValue];i++)
{
User *u=[data objectAtIndex:i];
[self.array_one addObject:u];
}
}
现在发生的事情是,如果我添加此行 [self.array_one removeAllObjects];
然后我的 data
数组,则在第二次将一个 Controller 查看到另一个 Controller 2 次变空了。我不知道为什么?
请指导我
最佳答案
您使用两种不同的方法传递数据。
viewBController.array_two=self.array_one;
这会将 array_two
指针指定为与 array_one
相同的指针。这意味着它们都指向同一个数组。
然后,当您调用 [self.delegate setData:self.array_two]
时,首先发生的事情是调用 [self.array_one removeAllObjects]
。但这指向与 array_two
相同的数组,因此您将清空数组。
如果两个类之间的数据在任何时候都明显相同,一种解决方案是将数组分配给两个 View Controller 一次,之后一个中的更改将反射(reflect)在另一个中。
如果不是,那么在分配给第二个 View Controller 时,您需要将数组复制到一个新对象。
关于ios - 删除 iOS 中的数组元素问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32869158/