我正在尝试执行异步 URL 请求:
NSURLRequest* request=[NSURLRequest requestWithURL: [NSURL URLWithString: @"http://www.youtube.com/"]];
NSOperation* operation=[NSOperation new];
NSOperationQueue* queue=[NSOperationQueue new];
[operation setCompletionBlock: ^()
{
}];
[queue addOperation: operation];
[NSURLConnection sendAsynchronousRequest: request queue: queue completionHandler: ^(NSURLResponse* response, NSData* data, NSError* error)
{
NSLog(@"%@",[data bytes]);
}];
所以我只需要 URL 中包含的数据。但是几秒钟后(可能是新创建的线程加载数据的时间)应用程序崩溃了:
thread 6 : EXC_BAD_ACCESS (code=13, address=0x0)
当我尝试打印数据字节时,确切的点是 NSLog 行中的 objc_msgSend_vtable5。 PS:我使用的是ARC。
最佳答案
问题在于方法 -[NSData bytes]
具有返回类型 void *
(并且是指向原始字节缓冲区的指针),但您正在处理通过尝试使用 %@
format specifier 记录返回值作为对象。要解决此问题,只需打印 data
而不是 [data bytes]
;更换您的线路
NSLog(@"%@", [data bytes]);
与
NSLog(@"%@", data);
关于objective-c - 执行异步 URL 请求后的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13280615/