2010-06-27 28 views
0

這裏的問題是:應用程序崩潰時訪問[NSData的dataWithContentsOfURL:URL]的長度

在2號線的應用程序崩潰,並且我得到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」. 

任何想法?

+0

一件事是把每個語句在其自己的行。調試器會停止在NSLog語句上,使問題更加清楚。 – Daniel 2010-06-27 02:54:56

+0

@丹尼爾:我認爲每一個陳述都是在自己的路線上;這只是一個格式問題。 – 2010-06-27 03:08:59

回答

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]); 
} 
相關問題