ios - 删除 iOS 中的数组元素问题?

标签 ios objective-c arrays

我在 iOS 中遇到一个非常奇怪的问题。我有两个类 AViewControllerBViewController。 在 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/

相关文章:

ios - 使用 Firebase 通知定位单个设备 (swift)

ios - Swift:无法分配给表达式的结果

java - arrayList 存储的不确定性

ios - YTPlayerView(youTube)付款者未在iOS 11中播放视频

android - 在OpenGL中与法线共享顶点索引

objective-c - xcode中Base SDK、iOS部署目标、Target、Project分别是什么意思

ios - MapView 不显示正确的点

c++ - 指向堆上数组的指针的地址

c++ - MPI_send 和 MPI_Resc - 更新单个数组值

ios - setValue 方法未更新到 Firebase 数据库