安全铸造,但EXC_BAD_ACCESS无论如何

问题描述:

免责声明:我很新的Obj-C和iOS(5,ARC启用)。安全铸造,但EXC_BAD_ACCESS无论如何

的NSURLConnectionDelegate方法的以下实现中的NSLog调用中创建EXC_BAD_ACCESS的,如果:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 

    NSLog(@"Response %@", response); 
    if([response isKindOfClass:[NSHTTPURLResponse class]]) 
    { 
     NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response; 
     NSLog(@"HTTP status code %@", [httpResponse statusCode]); 
    } 
} 

至于我设法找到了,该EXC_BAD_ACCESS主要是由于分配问题,错铸造引起的,和糟糕的内存管理。这些都不适用(我希望)。

由于提前, 克里斯

解决方案:在格式化字符串OG错误Noobie。改变第二的NSLog到:

NSLog(@"HTTP status code %i", [httpResponse statusCode]); 

statusCode返回NSInteger(一个longint),而不是一个指向NSObject实例。

格式说明符%@用于NSObject的参数。当从statusCode返回的整数值作为指向对象的指针被解释/传递,然后通过运行时消息传递或以其他方式被视为指向对象的指针时,可能会发生此问题。当通过%@打印对象参数时,记录器使用对象的-[NSObject description]的结果。

您可以通过打开编译器警告并纠正它生成的问题来避免将来出现此问题。

+0

非常感谢! – Chris 2012-01-16 13:53:02

+0

@Chris没问题! – justin 2012-01-16 13:58:19