我试图在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];
}
答案 0 :(得分:0)
在某些事情之后,保留计数减少到0,对象将被取消分配。这与将其设置为nil不同。它不会是零。虽然您可以将消息发送到nil,但是向已发布的对象发送消息将导致EXC_BAD_ACCESS错误。如果您发布一些创建和使用它的代码,也许我们可以帮助您调试它。尝试在开头保留两次。它是一个优雅的解决方案,但它可以作为一个快速解决方案。
答案 1 :(得分:0)
听起来像一个经典的僵尸。将环境变量NSZombieEnabled
设置为YES
(或使用Instruments.app中的Zombies工具)再次运行它。这应该可以为您提供有关正在发生的事情的更多信息。