首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“CFURLCreateStringByAddingPercentEscapes”在STTwitter库中已弃用

“CFURLCreateStringByAddingPercentEscapes”在STTwitter库中已弃用
EN

Stack Overflow用户
提问于 2017-04-19 18:56:25
回答 1查看 625关注 0票数 1

我在我的应用程序中使用了STTwitter库,它抛出了一个弃用警告,警告如下:

代码语言:javascript
复制
 '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中导致问题的代码:

代码语言:javascript
复制
@implementation NSString (RFC3986)
- (NSString *)st_stringByAddingRFC3986PercentEscapesUsingEncoding:(NSStringEncoding)encoding {

    NSString *s = (__bridge_transfer NSString *)(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                                         (CFStringRef)self,
                                                                                         NULL,
                                                                                         CFSTR("!*'();:@&=+$,/?%#[]"),
                                                                                         kCFStringEncodingUTF8));
    return s;
}
@end

问题是如何使用'stringByAddingPercentEncodingWithAllowedCharacter'.将其替换为等效的代码

EN

回答 1

Stack Overflow用户

发布于 2017-04-19 19:38:40

以下是有效的替换代码:

代码语言:javascript
复制
@implementation NSString (RFC3986)
- (NSString *) st_stringByAddingRFC3986PercentEscapesUsingEncoding: (NSStringEncoding) encoding {

   NSMutableCharacterSet *allowed = [NSMutableCharacterSet alphanumericCharacterSet];
   [allowed addCharactersInString: @"-._~"];

   return( [self stringByAddingPercentEncodingWithAllowedCharacters: allowed] );
   }    
@end

我测试了新代码和旧代码,到目前为止,它们生成的字符串是相等的。

在原始代码中,其想法是转义特定的命名字符集。它们是:

代码语言:javascript
复制
!*'();:@&=+$,/?%#[]

当您切换到使用'stringByAddingPercentEncodingWithAllowedCharacters',时,逻辑颠倒,只有未命名的字符被转义。因此,新代码指定了'alphanumericCharacterSet‘,并向其添加了一小组额外的字符。添加的字符为:

代码语言:javascript
复制
-._~

那些没有在新代码中命名的字符是在旧代码中显式命名的同一组字符。

顺便说一句,我不清楚在原始代码中传递的编码参数是否被使用过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43493750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档