1

我正在尝试计算我的表格视图应该有多少个单元格。这是由存储在 Array 中的查询结果确定的。

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

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

我的数组将由这样的对象组成:

{<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。如果是添加一个单元格,依此类推。

所以我需要获取数组中该键等于当前用户的项目的总数。

4

2 回答 2

2

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

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

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

如果数组来自 Core Data 获取请求,则将谓词添加到获取请求中会更有效。

于 2013-09-09T17:27:57.043 回答
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];
于 2013-09-09T17:29:09.027 回答