从NSDictionary计算allKeys会返回EXC_BAD_ACCESS

时间:2010-12-27 18:24:19

标签: iphone ios count nsdictionary

我正在尝试将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];
}
}

如果我只是像这样使用allKeys:

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

它在控制台中返回(“第1项”,“第2项”)。

但是当我添加这样的“count”方法时:

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

我得到:程序接收信号:“EXC_BAD_ACCESS”。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:10)

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

count给出int,但是使用%@进行打印,期望指向对象的指针。请改用%d

答案 1 :(得分:3)

正如您的代码目前所代表的那样,您告诉NSLog字符串需要一个对象。 count会返回NSInteger,因此会出错。要修复,请更改此行:

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

到此:

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