TableView不允许在字典中使用“section”

时间:2012-10-18 14:46:56

标签: objective-c ios

我想遍历一个json项列表,以便在我的分区tableView中使用。为此,我想重新构建数据以进行section->数组设置,其中array包含一个会话数组。

首先,我不知道这是否是首选的方式,可能有更简单的方法。我不断收到错误,我不允许使用'section'作为字典中的标识符。此外,当我使用别人而不是“部分”时,字典会被覆盖。

- (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;
}

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

首先,这就是NSInteger:

typedef int NSInteger;

您必须将其包装到对象中。类似的东西:

[NSNumber numberWithInteger:section]

然后将其添加到您的词典中。

答案 2 :(得分:0)

我真的不知道您的timeslotsSortedlocationsSorted包含正确的项目,但我们可以这样说。我建议您在调用- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;之前进行此排序。

让我们说,你收到了JSON,所以你必须像你一样解析它,然后调用[tableView reloadData]或用动画重新加载可见的单元格。

然后将调用您的tableView数据源方法,您将执行以下操作:

- (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]; 
}

并且不要忘记为self.sectionsself.sessionList

制作强大的属性