iOS:FilterUsingPredicate自定义对象

时间:2012-12-16 23:01:05

标签: ios nsmutablearray nspredicate

我有一个扩展NSObject的自定义类。我正在维护这个类对象的NSMutableArray。情况就是这样,

customObject-class {
   NSString *name;
   int ID;
   .....and many other properties;
}

customObjectsArray [
   customObject1,
   customObject2,
   ...etc
]

现在我正在尝试使用filterUsingPredicate删除具有nil名称的对象,如下所示,但它返回的对象很少或没有,而我知道有数百个名称不为nil或为空的对象。有人可以告诉我这里可能有什么问题。

[customObjectsArray filterUsingPredicate:[NSPredicate predicateWithFormat:@"name != nil"]];

2 个答案:

答案 0 :(得分:5)

为什么你不这样做:

NSMutableArray *array=...;
[array filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    CustomObject *customObject=(CustomObject *) evaluatedObject;
    return (customObject.name!=nil);
}]];

答案 1 :(得分:0)

当我回复@rdelmar时,我发现了一个问题。在实际初始化customObject1的数据之前调用此谓词。我应检查数据标志的状态,该数据标志表示已为此特定对象初始化数据,然后应用过滤器。有效。如果没有初始化数据,那么所有对象的名称都是正常的!