繁体   English   中英

修改循环内的NSMutableArray

[英]Modifying an NSMutableArray inside a loop

我有一个NSMutableArray填充了Task对象。 我希望能够删除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数组总是为空。 为什么是这样?

你忘了初始化completedTasks:

NSMutableArray *completedTasks = [NSMutableArray array];

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

为此,添加此行以创建自动释放的数组(这意味着您不必释放它)

NSMutableArray *completedTasks = [NSMutableArray array];

要么

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

但是当你不使用任何moere时(除非你使用ARC),你必须自己发布它[completedTasks release]

这将创建您的数组对象。

沙尼

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

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

来自NSMutableArray文档:

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

你可以试试 :

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM