私のアプリはシミュレーターで正常に実行されますが、デバイスで実行すると、SIGABRTで終了します。私はそれを次のコードに絞り込みました:
- (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:image]です。クラッシュを生成するメッセージ。次のコンソール出力があります。
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に更新していないため、OSまたはXcodeのバージョンにも変更はありません) 。