如何正确实现我的逻辑以填充我的UITableView

时间:2014-12-11 15:13:15

标签: ios objective-c uitableview

对不起伙计们,我遇到的这个问题非常简单。我只是无法绕过它,所以希望有人可以帮助我。非常感谢您的帮助。我通过NSURLConnectDelegate使用Web API获取JSON数据。我得到这样的东西:

(
{
 id = 340
 name = Vicent },
{
 id = 339
 name = Johny },
{
 id = 338
 name = Eric }
)

我将它保存在NSMutableArray中作为全局变量。现在,我有一个“ID”的NSSet。例如:

{
340, 339
}

numberOfRowsInSection 中,我返回集合的计数。我试图从数组加载NSSet中的ID,并保存从webAPI保存的数据,所以我在 cellForRowIndexPath 中执行类似的操作:

 for (NSNumber *num in [set allObjects]) {
            NSString *newString = [[savedArray objectAtIndex:indexPath.row] 
            NSString *new = [num stringValue];
            if ([new isEqual:newString]) {
           }}

我怎样才能填充我想要的ID?

1 个答案:

答案 0 :(得分:2)

JSON使您看起来像有一个字典数组,这是一个合理的数据结构,可用作表视图的数据源。

听起来你正在尝试过滤你的数组,只包含你集合中的项目。是吗?

如果是这样,您可以编写代码来创建一个新数组,其中包含数组元素的子集,其ID也在您的集合中。至少有六种方法可以做到这一点。一种相当简单的方法是使用NSArray方法indexesOfObjectsPassingTest。您将该方法传递给一个代码块,该代码块将检查每个数组元素以查看它的id对象是否在您的集合中。 这将为您提供一个NSIndexSet,其中包含数组中项目的索引,其ID在您的集合中。然后,您可以使用NSArray方法objectsAtIndexes来获取仅包含在集合中的对象的数组。这样的事情(假设你的字典数组被称为savedArray,你的集合被称为allObjects:

//get the indexes of items in the array savedArray who's id appears in the set allObjects
NSIndexSet *indexes = [savedArray indexesOfObjectsPassingTest: 
  ^(NSDictionary *obj,
  NSUInteger idx,
  BOOL *stop)
  {
    return [allObjects member: obj[@"id"]] != nil;
  }
];

//Now build an (immutable) array of just the objects who's ID are in the set
NSArray *subArray = [savedArray objectsAtIndexes: indexes];

上面创建的数组subArray是不可变的。如果你需要一个可变数组,你需要制作一个可变副本,这是一个单行更改。

免责声明:我仍然对块语法有点挣扎,所以上面的内容可能不完全正确,但它给你一般的想法。