【问题标题】:UIImagePickerController Causes my app to crash!UIImagePickerController 导致我的应用程序崩溃!
【发布时间】:2010-04-16 15:01:00
【问题描述】:

在我的应用程序中,用户可以选择一张图片,将 UIImageView 的图片更改为新的图片,然后使用 NSKeyedArchiver 将图片保存到 NSUserDefaults。当用户选择图片并调用- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info时,应用程序立即崩溃! Xcode 收到错误:SIGABRT。这是我的代码 -

- (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 - 我不知道该给它起什么名字,所以我开玩笑并给它起了这样的名字...... :) 提前致谢!

【问题讨论】:

  • 如果您提供应用程序崩溃的位置和方式等详细信息,将会提高您获得答案的机会。比如哪一行,调试日志等。
  • 对不起...我现在修好了!

标签: iphone uiimagepickercontroller nsuserdefaults nskeyedarchiver


【解决方案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!

-斯蒂芬

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    相关资源
    最近更新 更多