【问题标题】:Check through an Array for a specific object检查特定对象的数组
【发布时间】:2013-09-13 05:56:13
【问题描述】:

我正在尝试计算我的表格视图应该有多少个单元格。这是由存储在 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。如果是添加一个单元格,以此类推。

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

【问题讨论】:

  • 这似乎更像是NSDictionnary(带键)。
  • 你知道的,有时你还不如写一个循环。

标签: ios arrays ios6 nsarray


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案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];
    

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多