NSData给出NULL

时间:2012-12-31 18:48:27

标签: objective-c ios cocoa-touch base64

我使用UIImage编码将NSString转换为base64,但数据结果为空。这是我的代码:

[Base64 initialize];
    NSString *imageString = [NSString stringWithFormat:@"img:%@", [Base64 encode:UIImagePNGRepresentation(shared.image)]];
    NSData *imageData = [NSData dataWithBase64EncodedString:imageString];
    [shared.outputStream write:[imageData bytes] maxLength:[imageData length]];

我不知道发生了什么!!如果我使用UTF-8编码,它可以正常工作,但UIImage imageWithData结果为空(这不是问题的一部分)。 我做错了什么?


作为背景,这里的目的是修改此Ray Wenderlich demo,以便它也可以发送图像。

1 个答案:

答案 0 :(得分:3)

您使用img:为base64字符串添加前缀,因此使字符串无效base64。如果要测试解码字符串,请删除img:

NSString *imageString = [Base64 encode:UIImagePNGRepresentation(shared.image)];
//Data should not be nil anymore.
NSData *imageData = [NSData dataWithBase64EncodedString:imageString];

此外,没有理由将其从数据转换为字符串,然后再转换回相同的数据。我假设您希望将字符串字节写为"img:<base64 string>"

NSString *imageString = [NSString stringWithFormat:@"img:%@", [Base64 encode:UIImagePNGRepresentation(shared.image)]];
NSData *b64ImageData = [imageString dataUsingEncoding:NSUTF8StringEncoding];
[shared.outputStream write:[b64ImageData bytes] maxLength:[b64ImageData length]];