0

我想遍历一个 json 项目列表以在我的分段 tableView 中使用。为此,我想重组数据以设置部分-> 数组,其中数组包含会话数组。

首先,我不知道这是否是首选方法,可能有更简单的方法。我不断收到错误消息,即我不允许在字典中使用“部分”作为标识符。此外,当我使用“部分”以外的其他内容时,字典会不断被覆盖。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

NSString *day = _json[@"days"][3];
NSString *key;
NSUInteger count = 0;
NSMutableArray *sessionList = [[NSMutableArray alloc] init];

NSArray *timeslotsSorted = [[_json[@"schedule"][day] allKeys]
                            sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];


NSArray *locationsSorted = [[_json[@"schedule"][day][timeslotsSorted[section]] allKeys]
                            sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

for (key in locationsSorted) {
    NSDictionary *temp = _json[@"schedule"][day][timeslotsSorted[section]][key];
    if ([temp isKindOfClass:[NSDictionary class]]) {
        [sessionList addObject:temp[@"title"]]; //test array 
        count++;
    }

}

_sessionDict = @{
    section: sessionList
};

return count;
}
4

3 回答 3

1

您正在做所有工作以在错误的位置构建数据结构。假设您的数据中有 10 个部分。这将调用该tableView: numberOfRowsInSection方法 10 次,这使得这是一个非常低效的地方来做很多工作。您还必须实现返回要显示的部分数量的方法,以及显示每一行的方法。

我将在该viewWillLoad方法中构建我的数据结构,然后将其本地存储并在所有tableView方法中重用它。

于 2012-10-18T14:54:24.163 回答
0

i don't really know that your timeslotsSorted and locationsSorted contain right items, but lets say they do. I would recommend you to have this sorting before
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section and
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; are called.

Lets say, you received JSON, so you have to parse it as you do, and then call [tableView reloadData] or reload visible cells with animations.

and then your tableView data source methods will be called and you will do something like:

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSString* key = [self.sessionList objectAtIndex:section];
    return [[self.secions objectForKey:key] count]; 
}

and don't forget to make strong properties for self.sections and self.sessionList

于 2012-10-18T14:58:58.810 回答
0

首先,这就是 NSInteger:

typedef int NSInteger;

您必须将其包装到一个对象中。就像是:

[NSNumber numberWithInteger:section]

而不是将它添加到您的字典中。

于 2012-10-18T14:54:02.090 回答