我有NSMutableArray
包含PNMessage
个对象,所有这些对象都存储NSDictionary
个对象和一些属性(日期,通道)。我想从数组中删除keyR
和keyS
的值等于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);
}
}];
答案 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];