通过NSArray迭代并以12个为一组存储项目

时间:2014-03-11 06:57:19

标签: ios objective-c parsing nsarray

我绝对试图在这个问题上尽职尽责,但一直在努力。我有一个我已解析的对象数组,我想迭代这些并存储它们。假设数组是144个对象(只是一个例子),我想将它存储在12个组中以显示在tableview单元格中。实际上,在数组中的那12个对象中,我可能只在单元格中显示3-4个,但在详细视图中显示所有这些对象。

为了帮助解释我的意思(对不起,如果它在这一点上没有意义),这里有一些我得到的代码就是获取数据。

NSMutableArray *objectsArray = [[NSMutableArray alloc] initWithCapacity:0];

for (TFHppleElement *element in objectsNode) {
    PHSingleEvent *singleEvent = [[PHSingleEvent alloc]init];
    [objectsArray addObject:singleEvent];

    singleEvent.title = [[element firstChild] content];
}

这会拉下整个对象数组(未知数字但绝对是12的倍数)。我如何将12个对象一次存储到单个事件中?

我可以用

记录信息
PHSingleEvent *firstObject = [objectsArray objectAtIndex:0] // this one is null
PHSingleEvent *eventStartTime = [objectsArray objectAtIndex:1];
PHSingleEvent *eventEndTime = [objectsArray objectAtIndex:2];
...
PHSingleEvent *lastObject = [objectsArray objectAtIndex:11];

NSLog(@"single object of event: %@", eventStartTime.startTime);
NSLog(@"single object of event: %@", eventEndTime.endTime);

etc...

但是数组一直持续超过12.我希望迭代每个12个对象并存储这些值,最好是作为字符串显示在单元格和详细视图中。

有什么想法吗?

非常感谢,如果我不清楚,我会在这里回答任何问题。

下进行。

2 个答案:

答案 0 :(得分:1)

使用for循环怎么样?假设每个事件对象有12个子对象(即索引0 - 11),您可以使用mod函数实现存储它。例如:

NSMutableArray *eventArray = [[NSMutableArray alloc] init];
for(int i=0; i<objectArray.count/12;i++){
    int offset = 12*i;
    NSMutableArray *event = [objectsArray subarrayWithRange:NSMakeRange(offset, 12)];
    [eventArray addObject:event];
}

所以现在eventArray有n个数组,每个都有12个对象(其中n = totalObjects / 12)

编辑:更好的想法是使用NSDictionary。例如:

NSMutableArray *eventArray = [[NSMutableArray alloc] init];
    for(int i=0; i<objectArray.count/12;i++){
        int offset = 12*i;
        NSDictionary *tempDict = [[NSDictionary alloc] initWithObjectsAndKeys: [objectsArray objectAtIndex: offset], @"eventStartTime", [objectsArray objectAtIndex: offset+1], @"eventEndTime", ..., [objectsArray objectAtIndex: offset+11, @"lastObject",nil]; 
        [eventArray addObject:tempDict];
    }

然后,您可以使用如下所示的类似语句访问上述每个对象:

PHSingleEvent *eventStartTime = [[eventArray objectAtIndex: index] objectForKey: @"eventStartTime"];

希望这有帮助

答案 1 :(得分:0)

此方法将根据您指定的组大小返回较小数组的数组。

- (NSMutableArray*)makeGroupsOf:(int)groupSize fromArray:(NSArray*)array
{
    if (!array || array.count == 0 || groupSize == 0)
    {
        return nil;
    }

    NSMutableArray *bigGroup = [[NSMutableArray alloc] init];

    for (int i = 0; i < array.count; )
    {
        NSMutableArray *smallGroup = [[NSMutableArray alloc] initWithCapacity:groupSize];
        for (int j = 0; j < groupSize && i < array.count; j++)
        {
            [smallGroup addObject:[array objectAtIndex:i]];
            i++;
        }
        [bigGroup addObject:smallGroup];
    }
    return bigGroup;
}

我还没有测试过它。拥有较小数组的大数组之后,只需从子数组中填充每个单元格中任意数量的对象。

注意:您可能希望在数组为空,null或组大小为0时处理这些情况。