对不起伙计们,我遇到的这个问题非常简单。我只是无法绕过它,所以希望有人可以帮助我。非常感谢您的帮助。我通过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?
答案 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是不可变的。如果你需要一个可变数组,你需要制作一个可变副本,这是一个单行更改。
免责声明:我仍然对块语法有点挣扎,所以上面的内容可能不完全正确,但它给你一般的想法。