2010-09-16 130 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

相关问题