2

假设我有这个 JSON:

[
    {"x":"01", "ID":"1"},
    {"x":"02", "ID":"2"},
    {"x":"02", "ID":"3"},
    {"x":"03", "ID":"4"},
    {"x":"03", "ID":"5"},
    {"x":"03", "ID":"6"},
    {"x":"03", "ID":"7"}
]

我想像这样创建一个 UITableView:

------------
Section 01
------------
ID: 1
------------
Section 02
------------
ID: 2
ID: 3
------------
Section 03
------------
ID: 4
ID: 5
ID: 6
ID: 7

如何找出我需要多少个部分以及如何在每个部分中输出正确的数据?

4

3 回答 3

1

首先要做的是将该 JSON 转换为 Objective-C 数据结构。我推荐一个数组数组,其中“X”是每个“ID”值数组的索引。

就像是:

NSMutableArray *tableSections;
NSMutableArray *sectionData;

CustomDataObject *yourCustomDataObject;

int sectionIndex;

//Pseudo-code to create data structure
for(data in json) {

    sectionIndex = data.X;

    yourCustomDataObject = [[CustomDataObject alloc] initWithId:data.ID];

    //Do index check first to insure no out of bounds
    if(sectionIndex != OutOfBounds)
        sectionData = [tableSections objectAtIndex:sectionIndex];

    //Create the new section array if there isn't one for the current section
    if(!sectionData) {
        sectionData = [NSMutableArray new];
        [tableSections insertObject: sectionData atIndex: sectionIndex];
        [sectionData release];
    }

    [sectionData addObject: yourCustomDataObject];
    [yourCustomDataObject release];
}

上面的代码只是帮助您入门的伪代码。创建这个数组数组可能是您以前已经做过的事情。

重要的部分是通过实现 UITableViewDataSource 协议来访问这些数据。我建议继承 UITableView 并在您的自定义子类中实现 UITableViewDataSource 协议。

您将需要这些方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [tableSections count];
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [[tableSections objectAtIndex: section] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    //Implement as you normally would using the data structure you created

    NSMutableArray *sectionData = [tableSections objectAtIndex: indexPath.section];
    CustomDataObject *dataObject = [sectionData objectAtIndex: indexPath.row];

    NSLog(@"\n**** Debug Me *****indexPath: section: %i row: %i \ndataObject%@", indexPath.section, indexPath.row, dataObject);
}

这应该足以让你开始。弄清楚其余的细节应该是一个好习惯。

于 2012-12-19T00:12:10.590 回答
0

假设“x”的值将从 1 增加到n不跳过任何值,那么您需要的部分数将只是“x”的最后一个值(即n)。

如果没有,您确实必须遍历“x”的值以查看有多少唯一值。

于 2012-12-18T23:40:35.253 回答
0

结束了这个解决方案:

    NSMutableDictionary *result = [NSMutableDictionary dictionary];
    for(NSDictionary* dict in data) {
        NSNumber *x = [dict objectForKey:@"x"];
        NSMutableArray *resultsForX = [result objectForKey:x];

        if(!resultsForX) {
            resultsForX = [NSMutableArray array];
            [result setObject:resultsForX forKey:x];
        }

        [resultsForX addObject:dict];
    }

    NSMutableArray *newArr = [result allValues];
于 2012-12-20T19:53:54.370 回答