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

Что является причиной этого, так как не существует никаких проблем в симуляторе? Я очень озадачен и ценю ваш вклад. Все, что я делаю, это инициализация NSMutableArray в viewDidLoad, а затем добавление объекта в массив. Если я очищаю цели, нет никаких изменений в том, что происходит. Странно, потому что эта часть приложения прошла отлично несколько дней назад, и я вообще не модифицировал этот файл реализации (и я еще не обновлялся до новейшего 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 Code = 256 "Операция cann (Cocoa error 256.) «UserInfo = 0x19fe00 {NSURL = http: //image.weather.com/images/sat/uksat_600x405.jpg} –

+0

Если вы увидите ответ Джона Родригеса, он, вероятно, на правильном пути , Я думаю, что 256 - это сетевая ошибка. Вероятно, симулятор не может получить доступ к URL по какой-либо причине. У вас установлен брандмауэр или прокси-сервер на вашем компьютере? Можете ли вы получить доступ к этому URL-адресу из Safari на том же компьютере, на котором запущен Xcode? –

+0

Вот почему я теперь знаю, что такое ошибка. Он отлично работает в симуляторе, но iPhone вызывает проблему при работе с устройством. Он подключен к тому же беспроводному маршрутизатору, что и MacBook. Я могу получить доступ к изображению из сафари macbook, но не от iPhone, который я обнаружил. Почему это должно быть? –

0

Чтобы подробно остановиться на ответе Лохматой лягушки, я думаю, что наиболее вероятная причина, по которой изображение будет нулевым, - это проблема с чтением URL-адреса. Попробуйте использовать dataWithContentsOfURL:options:error: и проверив полученную ошибку, чтобы узнать, что произошло.

Смежные вопросы