- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我收到这个错误:
-[__NSCFNumber stringByAddingPercentEncodingWithAllowedCharacters:]: unrecognized selector sent to instance 0x7fab88c21750
我用这段代码得到它:
+ (NSString *)queryStringFromDictionary:(NSDictionary *)queryDictionary
{
NSURLComponents *components = [NSURLComponents componentsWithString:@""];
NSMutableArray *urlQueryComponents = [NSMutableArray array];
for (NSString *key in [queryDictionary allKeys])
{
NSString *value = queryDictionary[key];
NSURLQueryItem *newQueryItem = [NSURLQueryItem queryItemWithName:key value:value];
[urlQueryComponents addObject:newQueryItem];
}
components.queryItems = urlQueryComponents; // HERE I GET THE ERROR
return [components query];
}
在出现错误的情况下,我的 queryDictionary 看起来像这样:
{
lat = "49.3437442";
lng = "17.0571453";
username = demo;
}
还有一次,当我的 queryDictionary 如下所示时,它工作正常!
{
latlng = "49.343744,17.057145";
sensor = true;
}
所以我不明白这个问题或我该如何解决它。有什么想法吗?
最佳答案
你正在传递一个包含 NSNumber 作为键或值的字典。 queryWithItem:value:
期望键和值都是字符串。
选项 1
解决此问题的最简单方法是将所有键/值视为 NSObject 并使用 stringWithFormat 将它们转换为字符串。
替换:
NSURLQueryItem *newQueryItem = [NSURLQueryItem queryItemWithName:key value:value];
与:
NSURLQueryItem *newQueryItem = [NSURLQueryItem queryItemWithName:[NSString stringWithFormat:@"%@", key] value:[NSString stringWithFormat:@"%@", value]];
选项 2
如果你想坚持所有键都是字符串,我建议你使用泛型来输入字典,如果找到非字符串键则使用 NSAssert(这样你就可以找到你当前的错误)。
+ (NSString *)queryStringFromDictionary:(NSDictionary <NSString*, NSString*> *)queryDictionary {
NSURLComponents *components = [NSURLComponents componentsWithString:@""];
NSMutableArray *urlQueryComponents = [NSMutableArray array];
for (NSString *key in [queryDictionary allKeys]) {
NSString *value = queryDictionary[key];
// confirm key/value are strings
NSAssert([key isKindOfClass:[NSString class]], @"keys must be strings!");
NSAssert([value isKindOfClass:[NSString class]], @"values must be strings!");
NSURLQueryItem *newQueryItem = [NSURLQueryItem queryItemWithName:key value:value];
[urlQueryComponents addObject:newQueryItem];
}
components.queryItems = urlQueryComponents;
return [components query];
}
关于ios - 构建 queryString 时 NSURLComponents 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35189517/
根据 NSURLComponents 的文档: If you set the unencoded property, you can then obtain the encoded equivalen
我正在编写单元测试来测试 URL 生成器类。 我正在使用 NSURLComponents elementsWithString] 生成最终的 URL 对象。 是否存在关于 componentsWith
我正在尝试创建一个 URL 方案来以这种方式打开 Tweetbot 应用。 var urlComponents = NSURLComponents() urlComponents.scheme = "
我正在创建一个 NSURL URL 将包含一些转义字符(日语) NSString* currentlocationbarString = @"mbos.help.jp/search?q=専門&
当我添加一个查询项时,NSURLComponents 将 %2B 更改为 + 而 %7B 保持不变。根据我的理解,它应该同时解码“+”和“{”,为什么它只解码其中一个? NSString *url
我正在使用 NSURLComponents 并设置用户名和密码: let urlComponents = NSURLComponents(string: webservice); urlCompone
我收到这个错误: -[__NSCFNumber stringByAddingPercentEncodingWithAllowedCharacters:]: unrecognized selector
我正在使用 NSURLComponents,但似乎无法正确编码查询值。我需要最终 URL 将 + 表示为 %2B。 let baseUrl = NSURL(string: "http://www.ex
我不明白这两种调用方式有什么区别: NSURLComponents(URL: url, resolvingAgainstBaseURL: true) 和 NSURLComponents(URL: ur
我是一名优秀的程序员,十分优秀!