Мое приложение отлично работает в симуляторе, но при работе на устройстве оно завершается с помощью 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
Что является причиной этого, так как не существует никаких проблем в симуляторе? Я очень озадачен и ценю ваш вклад. Все, что я делаю, это инициализация NSMutableArray в viewDidLoad, а затем добавление объекта в массив. Если я очищаю цели, нет никаких изменений в том, что происходит. Странно, потому что эта часть приложения прошла отлично несколько дней назад, и я вообще не модифицировал этот файл реализации (и я еще не обновлялся до новейшего iOS 4.1, поэтому нет изменений в версии ОС или Xcode) ,
Да, это имеет смысл. Я неправильно понял, что это сказал, поскольку у меня была проблема, случайно пытающаяся запросить нулевой массив на днях. Я получаю следующую ошибку: PilotsMate (17524,0x3e9097c8) malloc: очищенная зона не поддерживает защитные страницы 2010-09-17 00: 27: 11.768 PilotsMate [17524: 5f03] Ошибка домена = NSCocoaErrorDomain Code = 256 "Операция cann (Cocoa error 256.) «UserInfo = 0x19fe00 {NSURL = http: //image.weather.com/images/sat/uksat_600x405.jpg} –
Если вы увидите ответ Джона Родригеса, он, вероятно, на правильном пути , Я думаю, что 256 - это сетевая ошибка. Вероятно, симулятор не может получить доступ к URL по какой-либо причине. У вас установлен брандмауэр или прокси-сервер на вашем компьютере? Можете ли вы получить доступ к этому URL-адресу из Safari на том же компьютере, на котором запущен Xcode? –
Вот почему я теперь знаю, что такое ошибка. Он отлично работает в симуляторе, но iPhone вызывает проблему при работе с устройством. Он подключен к тому же беспроводному маршрутизатору, что и MacBook. Я могу получить доступ к изображению из сафари macbook, но не от iPhone, который я обнаружил. Почему это должно быть? –