根据
NSURLRequest
我想是吧
UNIRest
在后台使用(或使用类似的方法),HTTPHeaders字段是
NSDictionary<NSString *,NSString *>
:
NSDictionary
钥匙所在位置
NSString
以及值的位置
NSString字符串
。
请参阅的相应方法/属性
NSURLRequest
或
NSMutableURLRequest
。
@property(readonly, copy) NSDictionary<NSString *,NSString *> *allHTTPHeaderFields;
- (NSString *)valueForHTTPHeaderField:(NSString *)field;
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
- (void)addValue:(NSString *)value
forHTTPHeaderField:(NSString *)field;
所以你不能
NSArray
对象作为值。iOS需要一个NSString,这说明您会遇到此错误:
***由于未捕获的异常“NSInvalidArgumentException”,正在终止应用程序,原因:“-[\uu NSArrayI length]:
发送到实例0x600000238220的选择器无法识别'
在这里,我们认识到调用的方法是
length
(
NSString字符串
目标C)中的基本目标
不可变数组
对象而不是
NSString字符串
一自从
不可变数组
没有实现它,这导致了错误和崩溃。
可能很难说出原因是因为可可的内部隐藏代码
长
(你自己看不到)。但是知道在哪里,并且假设
长
是为
NSString字符串
对象,而且罪犯也是
不可变数组
对象帮助您查明问题:
NSArray *tags = @[@"tag1", @"tag2"];
[parameters setValue:tags forKey:@"tags"];
所以
tags
需要成为
NSString字符串
对象而不是
不可变数组
一
根据您的说法,需要使用JSON字符串化来调用API。
因此:
NSArray *tags = @[@"tag1", @"tag2"];
NSData *tagsJSONData = [NSJSONSerialization dataWithJSONObject:tags options:0 error:nil]; //Might be useful to use a `NSError` object just in case
NSString *tagsJSONString = [[NSString alloc] initWithData:tagsJSONData encoding:NSUTF8StringEncoding];
[parameters setValue:tags forKey:@"tags"];
正如我在评论中所想,如果您的API需要逗号分隔的标记:
NSArray *tags = @[@"tag1", @"tag2"];
NSString *tagsString = [tags componentsJoinedByString:@","];
[parameters setValue:tags forKey:@"tags"];