【问题标题】:NSMutable array removeAllObject removing objects in other NSMutable array tooNSMutablearray removeAll 对象也删除其他 NSMutablearray 中的对象
【发布时间】:2014-01-03 05:15:22
【问题描述】:

我有三个类,即 DepartmentViewControllerDepartmentRequestDepartment。这就像我从 DepartmentViewcontroller 发出部门请求,并基于响应即时操作响应并在 DepartmentRequest 类中添加 NSmutableArray *responseArray。该数组仅包含 Department 对象。我希望 DepartmentViewController 中的这个 responseArray 用于搜索和重新加载 tableview。所以我通过委托将此数组传递给 DepartmentViewController 并将 responseArray 分配给 localArray。现在我根据这两个数组进行了搜索,但是如果我使用 removeallobject 删除任何一个数组。它也在其他数组中删除对象。

if(searchString.length>0)
  {

      [localArray removeAllObjects];
    for (int i =0 ; i < [departmentRequest.responseArray count]; i++) {
      Department *dept = [departmentRequest.responseArray objectAtIndex:i];

        if (([dept.departmentName rangeOfString:searchString options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)].location != NSNotFound)
          )

        {
                   [localArray addObject:dept];
        }
        else{
            NSLog(@"deptname %@",dept.departmentName);
        }

    }

    [departmentTableView reloadData];

如果我删除 localArray 中的对象,它会删除 departmentReqeust.responseArray 和 localArray 中的对象

【问题讨论】:

  • 您是使用 localArray = responseArray 直接分配吗?
  • 听起来你认为你有两个数组,实际上只有一个。您可能传递的是参考,而不是克隆。您提供的代码不足以确定是否是这种情况。

标签: ios objective-c arrays nsmutablearray


【解决方案1】:

你应该像这样分配

localArray = [NSArray arrayWithArray:responseArray];

【讨论】:

  • localArray也是MutableArray,所以我改成了[NSMutableArray arrayWithArray:responseArray]。谢谢
  • 很高兴能帮到你:)
  • 或 localArray = [responseArray mutableCopy]
【解决方案2】:

if(searchString.length>0) {

 // [localArray removeAllObjects];

 NSMutableArray arrTemp=[[NSMutableArray alloc]init];

for (int i =0 ; i < [departmentRequest.responseArray count]; i++) {
  Department *dept = [departmentRequest.responseArray objectAtIndex:i];

    if (([dept.departmentName rangeOfString:searchString options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)].location != NSNotFound)
      )

    {
               [arrTemp addObject:dept];
    }
    else{
        NSLog(@"deptname %@",dept.departmentName);
    }

}
localArray = [NSArray arrayWithArray:arrTemp];

[departmentTableView reloadData];

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多