我在我的应用程序中使用了STTwitter库,它抛出了一个弃用警告,警告如下:
'CFURLCreateStringByAddingPercentEscapes' is deprecated: first deprecated
in iOS 9.0 - Use [NSString stringByAddingPercentEncodingWithAllowedCharacters:]
instead, which always uses the recommended UTF-8 encoding, and which encodes
for a specific URL component or subcomponent (since each URL component or
subcomponent has different rules for what characters are valid).' deprecated
error. 以下是在STTwitter中导致问题的代码:
@implementation NSString (RFC3986)
- (NSString *)st_stringByAddingRFC3986PercentEscapesUsingEncoding:(NSStringEncoding)encoding {
NSString *s = (__bridge_transfer NSString *)(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)self,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]"),
kCFStringEncodingUTF8));
return s;
}
@end问题是如何使用'stringByAddingPercentEncodingWithAllowedCharacter'.将其替换为等效的代码
发布于 2017-04-19 19:38:40
以下是有效的替换代码:
@implementation NSString (RFC3986)
- (NSString *) st_stringByAddingRFC3986PercentEscapesUsingEncoding: (NSStringEncoding) encoding {
NSMutableCharacterSet *allowed = [NSMutableCharacterSet alphanumericCharacterSet];
[allowed addCharactersInString: @"-._~"];
return( [self stringByAddingPercentEncodingWithAllowedCharacters: allowed] );
}
@end我测试了新代码和旧代码,到目前为止,它们生成的字符串是相等的。
在原始代码中,其想法是转义特定的命名字符集。它们是:
!*'();:@&=+$,/?%#[]当您切换到使用'stringByAddingPercentEncodingWithAllowedCharacters',时,逻辑颠倒,只有未命名的字符被转义。因此,新代码指定了'alphanumericCharacterSet‘,并向其添加了一小组额外的字符。添加的字符为:
-._~那些没有在新代码中命名的字符是在旧代码中显式命名的同一组字符。
顺便说一句,我不清楚在原始代码中传递的编码参数是否被使用过。
https://stackoverflow.com/questions/43493750
复制相似问题