- [NSConcreteMutableData base64EncodedStringWithOptions:]:无法识别的选择器发送到实例0x776e920'

fla*_*ing 3 objective-c ios unrecognized-selector

我的应用程序一直崩溃,并显示以下消息:

*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [NSConcreteMutableData base64EncodedStringWithOptions:]:无法识别的选择器发送到实例0x776e920'

这是代码的一部分.任何帮助将不胜感激:

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
// Saving the image in the uiimage "myImage".
UIImage *myImage = [info objectForKey:UIImagePickerControllerOriginalImage];

NSString *imageString = [self encodeToBase64String:myImage];
[self dismissViewControllerAnimated:YES completion:NULL];
}

- (NSString *)encodeToBase64String:(UIImage *)image{
    NSString * test = [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    return test;
}
Run Code Online (Sandbox Code Playgroud)

我已经检查过,UIImage中有一个图像.谢谢.

Mar*_*n R 15

base64EncodedStringWithOptions: 从iOS 7和OS X 10.9开始提供.

"无法识别的选择器"异常可能意味着您在较早的iOS版本上运行代码,此方法不可用.

有第三方库提供类似的方法,如果你必须支持iOS 6或5(例如https://github.com/nicklockwood/Base64),可以使用它们.

NSData文档还指出有一个base64Encoding方法(和其对应物initWithBase64Encoding:)

虽然这种方法仅针对iOS 7公开发布,但它自iOS 4以来就已存在; 如果您的应用程序需要在iOS 7之前定位操作系统,则可以使用它.此方法的行为类似于base64EncodedStringWithOptions:,但忽略所有未知字符.

(所以似乎iOS NSData很长一段时间都进行了Base64转换,但它从未公开记录!)