• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 构建查询字符串时出现 NSURLComponents 问题

[复制链接]
菜鸟教程小白 发表于 2022-12-12 10:28:15 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我收到此错误:

-[__NSCFNumber stringByAddingPercentEncodingWithAllowedCharacters:]: unrecognized selector sent to instance 0x7fab88c21750        

我用这段代码得到它:

+ (NSString *)queryStringFromDictionaryNSDictionary *)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;
}

所以我无法理解这个问题或如何解决它。有什么想法吗?



Best Answer-推荐答案


您正在传递一个包含 NSNumber 作为键或值的字典。 queryWithItem:value: 期望键和值都是字符串。

选项 1

解决此问题的最简单方法是将所有键/值视为 NSObject,并使用 stringWithFormat 将它们转换为字符串。

替换:



与:

NSURLQueryItem *newQueryItem = [NSURLQueryItem queryItemWithName:[NSString stringWithFormat"%@", key] value:[NSString stringWithFormat"%@", value]];

选项 2

如果您想坚持所有键都是字符串,我建议您使用泛型作为输入字典,如果找到非字符串键则使用 NSAssert(这样您就可以找到当前的错误)。

+ (NSString *)queryStringFromDictionaryNSDictionary <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 - 构建查询字符串时出现 NSURLComponents 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35189517/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap