0

セクション化されたtableViewで使用するjsonアイテムのリストをループしたいと思います。このために、データを再構築して、セクション->配列を設定します。ここで、配列にはセッションの配列が含まれます。

まず第一に、これが好ましい方法かどうかはわかりません。もっと簡単な方法があるかもしれません。辞書で「セクション」を識別子として使用することは許可されていないというエラーが表示され続けます。さらに、「セクション」以外のものを使用すると、辞書が上書きされ続けます。

- (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個のセクションがあるとします。これにより、メソッドが10回呼び出されるため、tableView: numberOfRowsInSection多くの作業を行うにはかなり非効率的な場所になります。また、表示するセクションの数を返すメソッドと、個々の行を表示するメソッドを実装する必要があります。

メソッドでデータ構造を構築し、viewWillLoadそれをローカルに保存して、すべてのメソッドで再利用しtableViewます。

于 2012-10-18T14:54:24.163 に答える
0

まず、NSIntegerとは次のとおりです。

typedef int NSInteger;

オブジェクトにラップする必要があります。何かのようなもの:

[NSNumber numberWithInteger:section]

そしてそれをあなたの辞書に追加するよりも。

于 2012-10-18T14:54:02.090 に答える
0

timeslotsSorted私はあなたのとlocationsSortedが正しいアイテムを含んでいることを本当に知りませんが、彼らがそうしているとしましょう。事前にこの並べ替えを行うことをお勧めし
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionます
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

たとえば、JSONを受け取ったので、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.sectionsくださいself.sessionList

于 2012-10-18T14:58:58.810 に答える