从NSArray中删除包含指定内容的对象

时间:2014-06-04 21:01:26

标签: ios objective-c nsmutablearray nsdictionary

我有NSMutableArray包含PNMessage个对象,所有这些对象都存储NSDictionary个对象和一些属性(日期,通道)。我想从数组中删除keyRkeyS的值等于someString的数组中的所有对象(在同一个对象中)。

{\n    keyMessage = Lorem ipsum;\n    keyR = someString;\n    keyS = someString;\n}, date: (null), channel: sampple>",

我试图进行枚举,但我无法运行它。我知道我在NSArray上使用字典键是错误的,但我没有更好的主意。如果有人能帮助我,我真的很感激。

  self.messagesArray = [[NSMutableArray alloc]initWithArray:message];
  NSLog(@"mutable messages: %@", self.messagesArray);

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

        for (NSArray *messageObject in self.messagesArray) {
            if ([messageObject[@"keyS"] isEqual:someString] && [messageObject[@"keyR"] isEqual:someString]) {
                [objectsToRemove addObject:messageObject];
            }
        }

        if ([objectsToRemove count]>0) {
            [self.messagesArray removeObjectsInArray:objectsToRemove];
            NSLog(@"deleted: %@", objectsToRemove);
        }

    }];

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用-filteredArrayUsingPredicate:上的NSArray进行过滤。正如您对问题的评论中所提到的,看起来您正在尝试在数组上使用字典下标,但这些字体不会起作用,但猜测可能仅在您的示例中。

NSPredicate *filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bindings) {
    PNMessage *message = (PNMessage *)obj;
    if ([message.dict[@"keyS"] isEqualToString:someString] || [message.dict[@"keyR"] isEqualToString:someString]) {
        return NO;
    }

    return YES;
}

self.messagesArray = [messages filteredArrayUsingPredicate:filterPredicate];