NSDictionary导致EXC_BAD_ACCESS

时间:2010-06-16 22:20:53

标签: objective-c

我试图在nsdictionary上调用objectForKey:但是我收到了一个EXC_BAD_ACCESS错误。 nsdictionary是使用JSON框架创建的,然后保留。我第一次使用它(就在我创建它之后,相同的运行循环)它完全正常,但是当我尝试访问它时,没有任何作用。我正在做这个代码,试图弄清楚出了什么问题:

if (resultsDic == nil) {
    NSLog(@"results dic is nil.");
}
if ( [resultsDic respondsToSelector:@selector(objectForKey:)] ) {
    NSLog(@"resultsDic should respond to objectForKey:");
}

字典永远不会是nil,但它总是在respondsToSelector上崩溃。任何想法?

此外: 除了上面之外,这些是字典与以下内容进行交互的其他地方:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [connection release];

    //get the data in a usable form
    NSString *jsonString = [[NSString alloc] initWithData:downloadedData encoding:NSUTF8StringEncoding];
    resultsDic = [jsonString JSONValue];

    [self processResults];

    NSLog(@"Success. Received %d bytes of data",[downloadedData length]);
    [downloadedData release];
    [jsonString release];
}



- (void)processResults
{
        NSArray *resultsArr = [resultsDic objectForKey:@"results"];
                CLLocationCoordinate2D coordinate = [self coordinateFromResult:[resultsArr objectAtIndex:0]];
        NSLog(@"lat: %f lng: %f", coordinate.latitude, coordinate.longitude);
}

- (void)dealloc {
  [resultsDic release];
  [super dealloc];
}

2 个答案:

答案 0 :(得分:0)

在某些事情之后,保留计数减少到0,对象将被取消分配。这与将其设置为nil不同。它不会是零。虽然您可以将消息发送到nil,但是向已发布的对象发送消息将导致EXC_BAD_ACCESS错误。如果您发布一些创建和使用它的代码,也许我们可以帮助您调试它。尝试在开头保留两次。它是一个优雅的解决方案,但它可以作为一个快速解决方案。

答案 1 :(得分:0)

听起来像一个经典的僵尸。将环境变量NSZombieEnabled设置为YES(或使用Instruments.app中的Zombies工具)再次运行它。这应该可以为您提供有关正在发生的事情的更多信息。