修改循环内的NSMutableArray

时间:2012-01-20 18:16:02

标签: iphone nsmutablearray nsarray

我有NSMutableArrayTask个对象。我希望能够删除completed属性设置为YES

的用户
    NSMutableArray *allTasks = (NSMutableArray *)[[TaskStore defaultStore] allTasks];

    NSMutableArray *completedTasks;

    for (Task *task in allTasks) {
        if ([task completed]) {
            [completedTasks addObject:task];
        }
    }

    [allTasks removeObjectsInArray:completedTasks];

调试时我注意到completedTasks数组总是空的。这是为什么?

4 个答案:

答案 0 :(得分:2)

您忘记初始化completedTasks:

NSMutableArray *completedTasks = [NSMutableArray array];

答案 1 :(得分:0)

必须先初始化数组才能使用它,初始化实际上会创建数组对象 -

要执行此操作,请添加此行以创建自动释放的数组(这意味着您无需释放它)

NSMutableArray *completedTasks = [NSMutableArray array];

或者

 NSMutableArray *completedTasks = [[NSMutableArray alloc] init];

但是当你不使用它时,你必须自己释放它[completedTasks release](除非你使用ARC)。

这将创建您的数组对象。

沙尼

答案 2 :(得分:0)

您尚未初始化completedTasks。你需要添加这个:

NSMutableArray *completedTasks = [[NSMutableArray alloc] init];

答案 3 :(得分:0)

来自NSMutableArray文档的

  

此方法假定otherArray中的所有元素都响应hash和isEqual:。

您可以尝试:

 [allTasks filterUsingPredicate:[NSPredicate predicateWithFormat:@"completed = %@", [NSNumber numberWithBool:YES]]]
相关问题