通过Array检查特定对象

时间:2013-09-09 17:07:50

标签: ios arrays ios6 nsarray

我想弄清楚我的表视图应该有多少个单元格。这取决于存储在Array中的查询结果。

  1. 加载视图时,数组可能不存在或具有任何值,因此单元格应为0.

  2. 如何检查我的数组以检查特定对象。我知道我可以使用containsObject或equalTo ...

  3. 我的数组将由以下对象组成:

    {<GameTurn:TLED0qH44P:(null)> {\n    GameRef = \"<Game:KgguI4ig4O>\";\n    GameTurnImage = \"<PFFile: 0xb3da9d0>\";\n    GameTurnWord = tester;\n    OriginalImageCenterX = \"27.9\";\n    OriginalImageCenterY = \"29.39375\";\n    TurnCount = 1;\n    UploadedBy = \"<PFUser:UgkZDtDsVC>\";\n}
    

    上面会有多个条目。对于每个条目,我需要检查UploadedBy键是否等于PFUser currentUser。如果是添加一个单元格,依此类推。

    所以我需要得到数组中该键与当前用户相等的项目的总体计数。

2 个答案:

答案 0 :(得分:2)

您可以过滤数组以获取所有匹配对象的新数组:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UploadedBy = %@", currentUser];
NSArray *filtered = [array filteredArrayUsingPredicate:predicate];

并将过滤后的数组用作表视图数据源。

如果阵列来自Core Data fetch请求,那么它会更有效 将谓词添加到获取请求中。

答案 1 :(得分:2)

有很多方法可以在Objective-C中过滤数组。以下是使用块和NSIndexSet的一种方法。

您可以获取对象通过测试的原始数组的所有索引(在块中指定)。然后创建另一个由这些索引处的对象组成的数组。

// get all indexes of objects passing your test
NSIndexSet *indexes = [myArray indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    // replace this with your equality logic
    return [obj uploadedBy] == [PFUser currentUser];
}];

// Filled with just objects passing your test
NSArray *passingObjects = [myArray objectsAtIndexes: indexes];