Подсчет всех ключей из NSDictionary возвращает EXC_BAD_ACCESS - PullRequest
4 голосов
/ 27 декабря 2010

Я пытаюсь отправить NSDictionary в TableViewController, данные изначально поступают из файла .plist. Я просто хочу отправить объект, который существует дальше по иерархии, в новый TableViewController. Но проблемы возникают, когда я пытаюсь подсчитать количество элементов в numberOfSectionsInTableView.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {   
// Gets the dictionary for the currently selected row
NSDictionary *dict = [[data objectForKey:[[data allKeys] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];

// Checks if the key "Room" exists
if([dict objectForKey:@"Room"]) {
    SalesFairSessionTableViewController *sessionViewController = [[SalesFairSessionTableViewController alloc] init];

    // Sets the data in the subview Controller
    [sessionViewController setData:[dict objectForKey:@"Room"]];

    // And the title
    [sessionViewController setTitle:[dict objectForKey:@"Title"]];

    // Problem is here... returns EXC_BAD_ACCESS
    NSLog(@"%@", [[[dict objectForKey:@"Room"] allKeys] count]);

    [self.navigationController pushViewController:sessionViewController animated:YES];
    [sessionViewController release];
}
}

Если я просто использую все клавиши, как это:

NSLog([[dict objectForKey:@"Room"] allKeys]);

Возвращается («Элемент 1», «Элемент 2») в консоли.

Но когда я добавляю метод "count" следующим образом:

NSLog(@"%@", [[[dict objectForKey:@"Room"] allKeys] count]);

Я просто получаю: Программа получила сигнал: «EXC_BAD_ACCESS».

Что мне здесь не хватает?

Ответы [ 2 ]

10 голосов
/ 27 декабря 2010
NSLog(@"%@", [[[dict objectForKey:@"Room"] allKeys] count]);

count дает int, но вы печатаете с %@, ожидая указатель на объект.Вместо этого используйте %d.

3 голосов
/ 27 декабря 2010

Поскольку ваш код в настоящее время стоит, вы указываете строке NSLog ожидать объект. count возвращает NSInteger, отсюда и ошибка. Чтобы исправить, измените эту строку:

NSLog(@"%@", [[[dict objectForKey:@"Room"] allKeys] count]);

к этому:

NSLog(@"%i", [[[dict objectForKey:@"Room"] allKeys] count]);
...