繁体   English   中英

initWithBase64Encoding不推荐使用的base64

[英]initWithBase64Encoding deprecated base64

在项目中升级到Xcode 7后,我在Xcode中收到警告,我使用的是CoacoSecurity ,它在以下代码行中使用Base64进行加密:

if (![NSData instancesRespondToSelector:@selector(initWithBase64EncodedString:options:)])
{

    decoded = [[self alloc] initWithBase64Encoding:[string stringByReplacingOccurrencesOfString:@"[^A-Za-z0-9+/=]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [string length])]];

}

它告诉我initWithBase64Encoding已过时,因此如何克服此警告并进行修复。

我已经对其进行了转换,但又收到另一个警告:

decoded = [[self alloc] initWithBase64EncodedString:[string stringByReplacingOccurrencesOfString:@"[^A-Za-z0-9+/=]" withString:@""] options:NSRegularExpressionSearch];

警告说:

Implicit conversion from enumeration type enum NSStringCompareOptions to different enumeration type NSDataBase64DecodingOptions (aka enum NSDataBase64DecodingOptions)

用这个

NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];

理解

NSData *data=[[NSData alloc]initWithBase64Encoding:(NSString *)dict];

这是适用于OSX 10.8及更高版本的解决方案。

// assume sData is an NSString that's already been set
NSData *vData;
if ([vData respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
  vData = [[NSData alloc] initWithBase64EncodedString:sData options:kNilOptions];
} else { // 10.8 or earlier
  vData = [[NSData alloc] initWithBase64Encoding:sData];
}
NSString *sResult = [[NSString alloc]
            initWithData:vData encoding:NSUTF8StringEncoding];

仅当您想将其转换为NSString而不是NSData时,才插入sResult行。

因此,这为您提供了Base64编码的字符串。 如果现在要取消编码,则可以执行以下操作:

// assuming sData is an NSString that's already been set
NSString *sResult = @"";
NSData *vData = [sData dataUsingEncoding:NSUTF8StringEncoding];
if ([vData respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
    sResult = [vData base64EncodedStringWithOptions:kNilOptions];
} else { // 10.8 or earlier
    sResult = [vData base64Encoding];
}

好吧,首先我按照@Ske57建议使用initWithBase64Encoding ,然后要克服该警告,我必须将其NSDataBase64DecodingOptionsNSDataBase64DecodingOptions ,并且应该可以正常工作:

decoded = [[self alloc] initWithBase64EncodedString:[string stringByReplacingOccurrencesOfString:@"[^A-Za-z0-9+/=]" withString:@""] options:(NSDataBase64DecodingOptions)NSRegularExpressionSearch];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM