2010-09-16 131 views
0

我的應用在模擬器中運行良好,但在設備上運行時,它會以SIGABRT終止。我已經縮小到以下代碼:NSMutableArray - 應用在模擬器中運行,但不在設備上

- (void)loadImage { 
int imageNumber = currentImageNumber; 
// check to see if the image has already been downloaded. 
// if not, get it and add it to an array 
if ([imageData count] < totalNumberOfImages && (imageNumber + 1) > [imageData count]) { 
    NSString *urlString = [[mainMenuItem.imageDetails objectAtIndex: imageNumber] objectForKey: @"url"]; 
    NSURL *url = [NSURL URLWithString: urlString]; 
    NSData *data = [NSData dataWithContentsOfURL: url]; 
    UIImage *image = [UIImage imageWithData: data]; 
    [imageData addObject: image]; 
} 

// set the image from the array 
self.imageOnScreen = [imageData objectAtIndex: imageNumber]; 

}

它是[的imageData ADDOBJECT:圖片];使用以下控制檯輸出的消息:

2010-09-17 00:03:03.005 PilotsMate[17426:5e03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x313f4fd3 __exceptionPreprocess + 114 
    1 libobjc.A.dylib      0x3302f8a5 objc_exception_throw + 24 
    2 CoreFoundation      0x31377f99 -[__NSArrayM insertObject:atIndex:] + 472 
    3 CoreFoundation      0x31377da7 -[__NSArrayM addObject:] + 34 
    4 PilotsMate       0x00007c5d -[WeatherDetailViewController loadImage] + 300 
    5 PilotsMate       0x00007eb1 -[WeatherDetailViewController displayPicture:] + 232 
    6 Foundation       0x33265c9d -[NSThread main] + 44 
    7 Foundation       0x332ea9e1 __NSThread__main__ + 972 
    8 libSystem.B.dylib     0x3527598d _pthread_start + 248 
    9 libSystem.B.dylib     0x3526b0ec thread_assign_default + 4294967295 
) 
terminate called after throwing an instance of 'NSException' 
[Switching to thread 11523] 
[Switching to thread 11523] 
Program received signal: 「SIGABRT」. 
kill 

這是什麼原因導致的,因爲模擬器中沒有問題?我很困惑,並希望你的意見。我所做的只是在viewDidLoad中初始化一個NSMutableArray,然後向該數組添加一個對象。如果我清理目標,發生的事情不會改變。奇怪的是,因爲這部分應用程序前幾天運行良好,我根本沒有修改這個實現文件(我也沒有更新到最新的iOS 4.1,所以沒有改變操作系統或Xcode版本) 。

回答

3

您粘貼的錯誤消息說,這一切:

[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0 

image對象是nil。爲什麼它是nil?在模擬器中運行時在Xcode中設置一個斷點,並找出罪魁禍首上方的哪一行。

+0

是的,這是有道理的。我誤解了那個說法,因爲我有一個問題偶然試圖查詢一個零陣列有一天。我得到以下錯誤: PilotsMate(17524,0x3e9097c8)malloc:可清除區域不支持保護頁面 2010-09-17 00:27:11.768 PilotsMate [17524:5f03]錯誤域= NSCocoaErrorDomain代碼= 256「操作cann '可以完成(Cocoa error 256.)「UserInfo = 0x19fe00 {NSURL = http://image.weather.com/images/sat/uksat_600x405.jpg} – 2010-09-16 23:33:12

+0

如果你看到Jon Rodriguez的回答,他可能是在正確的軌道上。我認爲256是一個網絡錯誤。可能由於某種原因,模擬器無法訪問URL。你的機器上是否安裝了防火牆或代理?你能在運行Xcode的同一臺機器上從Safari訪問該URL嗎? – 2010-09-16 23:39:39

+0

這就是爲什麼我現在知道錯誤是什麼。它在模擬器中運行良好,但iPhone從設備運行時會導致問題。它連接到與macbook相同的無線路由器。我可以從macbook Safari瀏覽器訪問該映像,但不能從我發現的iPhone中訪問該映像。爲什麼會這樣? – 2010-09-16 23:48:00

相關問題