访问[NSData dataWithContentsOfURL:url]的长度时应用程序崩溃

时间:2010-06-27 02:39:01

标签: iphone

问题在于:

应用程序在第二行崩溃,我得到了EXC_BAD_ACCESS异常。

NSURL *url = [NSURL URLWithString:@"..."];

NSError *error = nil;
NSData *data = [NSData dataWithContentsOfURL:url 
          options:NSDataReadingMapped 
            error:&error];
NSLog(@"Error: %@", error);
NSLog(@"%@", [data length]);

我得到了:

Error: (null)
Program received signal:  “EXC_BAD_ACCESS”.

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

数据的长度是无符号整数,而不是对象,因此必须使用适当的格式说明符。所以:

NSLog(@"%lu", (unsigned long)[data length]);

会奏效。有关更多信息,请参阅documentation中的NSLog格式说明符。

此外,除非方法指示错误状态,否则不应检查error(请参阅每个也报告错误的方法的相应文档)。即使没有发生错误,它也可能包含意外数据。所以:

if( !data ) {
  NSLog(@"An error must have occurred: %@, %@", error, [error userInfo]);
} else {
  NSLog(@"The data length: %lu", (unsigned long)[data length]);
}