NSDictionary to TableView - PullRequest
       4

NSDictionary to TableView

2 голосов
/ 18 апреля 2011

, поскольку я новичок в Stackoverflow, я пока не могу комментировать кого-то еще.(моя репутация 16 ..).У меня вопрос об этом anwser: Как мне поместить эти данные JSON в мое табличное представление?Пожалуйста, помогите мне, я живу в кошмаре:)

Fulvio говорит, что вы должны использовать [eventNameList addObject:event]; и [eventNameList objectAtIndex:indexPath.row]; для хранения и получения данных о событии, ноaddObject является методом NSMutableSet, а objectAtIndex: indexPath.row - нет.Поэтому я не могу использовать этот метод для получения данных из NSMutableSet.

Кроме того, я не могу использовать методы подсчета ни один.

Любая идея?

Ответы [ 3 ]

15 голосов
/ 18 апреля 2011

Предполагая, что у вас есть NSDictionary, вы можете использовать метод [dictionary allKeys] для получения массива со всеми ключами (на данный момент давайте назовем его keyArray).Для rowCount вы можете вернуть количество объектов в этом keyArray.Чтобы получить элемент, который должен отображаться в ячейке, вы можете использовать [словарь objectForKey: [keyArray objectAtIndex: indexPath.row]]], чтобы получить соответствующий словарь для отображаемой ячейки.

В коде:

// use the keyArray as a datasource ...
NSArray *keyArray = [jsonDictionary allKeys];

// ------------------------- //

// somewhere else in your code ...
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   return [keyArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *CellIdentifier = @"Cell";

   UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) {
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
      // set some cell defaults here (mainly design) ...
   }

   NSString *key = [keyArray objectAtIndex:indexPath.row];
   NSDictionary *dictionary = [jsonDictionary objectForKey:key];
   // get values from the dictionary and set the values for the displayed cell ...

   return cell;
}

@ Tieme: очевидно, что используемый вами URL уже возвращает массив, вам не нужно обрабатывать словарь (вы можете просто использовать массив в качестве источника данных), проверьте следующее:

SBJSON *json = [[[SBJSON alloc] init] autorelease];
NSURL *url = [NSURL URLWithString:@"http://www.my-bjoeks.nl/competitions/fetchRoutes/25.json"];
NSString *string = [[[NSString alloc] initWithContentsOfURL:url] autorelease];
NSError *jsonError = nil;
id object = [json objectWithString:string error:&jsonError];
if (!jsonError) {
   NSLog(@"%@", object);
   NSLog(@"%@", [object class]); // seems an array is returned, NOT a dictionary ...
}

// if you need a mutableArray for the tableView, you can convert it.
NSMutableArray *dataArray = [NSMutableArray arrayWithArray:object]
0 голосов
/ 18 апреля 2011

eventNameList следует определять как NSMutableArray, а не NSMutableSet. NSMutableArray отвечает как на -addObject (он помещает новый объект в конец массива), так и на -objectAtIndex:, и когда вы думаете об этом, табличное представление - это, по сути, упорядоченный список, а также массив, тогда как набор нет.

0 голосов
/ 18 апреля 2011

LUCKY:)

Предполагая, что у вас может быть nsmutablearray из nsdictionary.

В этом случае вы можете получить данные, используя:

[dictionary objectforkey:@"key"] objectAtIndex:indexpath.row]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...