imagePickerController didFinishPickingMediaWithInfo дает мне странное изображение

Я написал некоторый код, чтобы добавить фотографию, сделанную камерой, и добавить ее в NSMutableArray UIImages.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [picker dismissModalViewControllerAnimated:YES];

    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    self.description.text = [NSString stringWithFormat:@"image is %d by %d", image.size.width, image.size.height];

    //[self.imageArr addObject:image]

    //[self saveImages];
}

«self.description.text» — это UILabel, который я просто использую для получения информации при тестировании на своем iPhone (мой macbook слишком стар для обновления до последней ОС и версии Xcode).

Я обнаружил, что когда я добавляю изображение в свой imageArr, приложение вылетает (я знаю, что imageArr не равен нулю, я использовал описание UILabel для проверки).

Если я закомментирую функции addObject и saveImages, я обнаружил, что после того, как я сделал снимок, в описании указано, что UIImage имеет ширину 0 и высоту 1084850176. Кто-нибудь сталкивался с этой проблемой раньше? Я пытаюсь делать и сохранять фотографии в приложении уже несколько дней, но не могу решить эту проблему.

EDIT: я решил проблему с размерами изображения, используя %f вместо %d (спасибо idz!).

Он все еще падает, когда я раскомментирую строку [self.imageArr addObject:image]. В отчете о сбое говорится, что тип исключения EXC_CRASH (SIGABRT) при запуске этой строки. Я действительно не знаю, что это значит, но я уверен, что imageArr не равен нулю, а является NSMutableArray, поэтому я не понимаю, почему он продолжает падать там.


person max    schedule 03.04.2013    source источник
comment
image.size.width и image.size.height — это CGFloat, поэтому для их печати следует использовать %f или %g. Также вы должны добавить больше информации о том, что вы подразумеваете под сбоем... Какое сообщение вы видите?   -  person idz    schedule 03.04.2013
comment
О! Я исправил переключение на %f, и теперь размеры правильные, но все еще происходит сбой, когда я раскомментирую строку [self.imageArr addObject:image]. В отчете о сбое говорится, что тип исключения EXC_CRASH (SIGABRT) при запуске этой строки. Я действительно не знаю, что это значит, но я уверен, что imageArr не равен нулю, а является NSMutableArray, поэтому я не понимаю, почему он продолжает падать там.   -  person max    schedule 03.04.2013
comment
Почему вы не используете NSLog для отправки описательных сообщений самому себе??? И почему вы не просматриваете свой код в отладчике, чтобы увидеть, каковы на самом деле значения всех этих вещей? Вы программируете, догадываясь!   -  person matt    schedule 03.04.2013
comment
Можете ли вы показать мне часть alloc init метода self.imageArr и saveImages   -  person Arun    schedule 03.04.2013
comment
@Matt - я не могу выполнять отладку со своего устройства, потому что использую устаревшую версию Xcode, тогда как на моем iPhone установлена ​​​​последняя ОС. Я еще не очень много знаю об отладке на iPhone, так что да, я должен больше использовать NSLog, и я скоро рассмотрю это.   -  person max    schedule 03.04.2013
comment
@Spynet - в верхней части функции configureView у меня есть _imageArr = [[NSMutableArray alloc] init]; У меня также есть функция loadImages, которую я вызываю после этого, которая предположительно загружает сохраненные изображения (конечно, до сих пор их не было). В нем у меня есть NSMutableArray *tempArr = [[NSMutableArray alloc] init];, который должен быть заполнен загруженными изображениями, а затем я делаю self.imageArr = [tempArr mutableCopy]; Это единственные места, где я выделяю/инициирую imageArr.   -  person max    schedule 03.04.2013
comment
Как отлаживать: apeth.com/iOSBook/ch09.html#_debugging   -  person matt    schedule 03.04.2013
comment
Обычно, когда возникает SIGABRT, имеется гораздо больше информации о первопричине. Вам придется опубликовать эту информацию, если вы хотите, чтобы у людей был шанс помочь вам.   -  person idz    schedule 03.04.2013
comment
Поигравшись с кодом еще немного, я нашел способ выполнить то, что я пытаюсь сделать, не используя массив изображений. Мне все еще любопытно, почему продолжают происходить сбои, но в данный момент у меня нет времени экспериментировать с этим дальше. Спасибо за вашу помощь и предложения!   -  person max    schedule 07.04.2013


Ответы (1)


Обычно вам нужно выделить и инициализировать self.imageArr.

Это то, что обычно вызывает эти ошибки. Также, если это массив, убедитесь, что это изменяемый массив.

person Ben Coffman    schedule 03.04.2013