0

私のアプリでは、ユーザーは画像を選択し、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であることを笑わないでください-名前を付けるのがわからなかったので、冗談を言って名前を付けました... :)よろしくお願いします!

4

1 に答える 1

1

UIImage を直接アーカイブすることはできません - UIImage は NSCoding を実装していません。UIImage[JPEG|PNG]RepresentationNSData オブジェクトに変換するには、いずれかを使用する必要があります。

したがって、コードは次のようになります。

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

画像を元に戻すには、逆が必要です。

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

チッ!

-スティーブン

于 2010-05-13T13:49:09.237 に答える