0

В моем приложении пользователь может выбрать изображение, изменить изображение UIImageView на новый imge и сохранить изображение в NSUserDefaults с помощью NSKeyedArchiver. Когда пользователь выбирает изображение и вызывается - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info, приложение сразу же падает! Xcode получает ошибку: SIGABRT. Вот мой код -UIImagePickerController Призывает мое приложение к сбою!

 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [picker dismissModalViewControllerAnimated:YES]; 
    if ([[NSUserDefaults standardUserDefaults] integerForKey:@"PictureKey"] == 1) { 
     UIImage *previmage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
     [prevbutton setImage:previmage]; 
     NSData *previmagedata = [NSKeyedArchiver archivedDataWithRootObject:previmage]; 
     [[NSUserDefaults standardUserDefaults] setObject:previmagedata forKey:@"PrevImage"]; 
    } else if ([[NSUserDefaults standardUserDefaults] integerForKey:@"PictureKey"] == 2) { 
     UIImage *nextimage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
     [nextbutton setImage:nextimage]; 
     NSData *nextimagedata = [NSKeyedArchiver archivedDataWithRootObject:nextimage]; 
     [[NSUserDefaults standardUserDefaults] setObject:nextimagedata forKey:@"NextImage"]; 
    }else { 
     UIImage *optionsimage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
     [moreoptionsbutton setImage:optionsimage]; 
     NSData *optimagedata = [NSKeyedArchiver archivedDataWithRootObject:optionsimage]; 
     [[NSUserDefaults standardUserDefaults] setObject:optimagedata forKey:@"OptionsImage"]; 
    } 
} 
 

И вот моя ошибка.

 

wait_fences: failed to receive reply: 10004003 
2010-04-16 18:09:25.012 iPimpYourMusicApp[2815:6807] Failed to save the videos metadata to the filesystem. Maybe the information did not conform to a plist. 
2010-04-16 18:09:49.009 iPimpYourMusicApp[2815:207] *** -[UIImage encodeWithCoder:]: unrecognized selector sent to instance 0x1a1180 
2010-04-16 18:09:49.016 iPimpYourMusicApp[2815:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIImage encodeWithCoder:]: unrecognized selector sent to instance 0x1a1180' 
2010-04-16 18:09:49.026 iPimpYourMusicApp[2815:207] Stack: (
    864992541, 
    859229716, 
    864996349, 
    864492313, 
    864454720, 
    854367759, 
    854367021, 
    854365681, 
    27619, 
    841224192, 
    857776904, 
    857868032, 
    857637052, 
    839607712, 
    839985680, 
    854089611, 
    864740547, 
    864738335, 
    875880904, 
    838872112, 
    838865456, 
    11173, 
    11068 
) 
terminate called after throwing an instance of 'NSException' 
[Switching to thread 11779] 
Program received signal: “SIGABRT”. 
 

Не смейтесь имя мое приложение является iPimpYourMusicApp - я понятия не имел, что назвать его, так что я шутил и назвал его, что ... :) Заранее спасибо!

+2

Это повысит ваши шансы получить ответ, если вы поставите такие детали, как, где и как ваши appliaction аварии. Например, какая строка, журнал отладки и т. Д. –

+0

Простите, что ... Я исправил это сейчас! – Flafla2

ответ

1

Вы не можете напрямую архивировать UIImage - UIImage не реализует NSCoding. Вы должны использовать один из UIImage[JPEG|PNG]Representation, чтобы преобразовать его в объект NSData.

Таким образом, вы код будет выглядеть следующим образом:

UIImage *optionsimage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
[moreoptionsbutton setImage:optionsimage]; 
[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(optionsimage) forKey:@"OptionsImage"]; 

Получение изображения обратно потребовало бы обратное:

UIImage *optImage = [UIImage imageWithData:[[NSUserDefaults standardUserDefaults] dataForKey:@"OptionsImage"]]; 

HTH!

-Stephen

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