Согласно 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», причина: '- [__ NSArrayI length]: нераспознанный селектор, отправленный экземпляру0x600000238220 '
Там мы признаем, что вызываемый метод length
(NSString
basic в Objective-C) пытается вызвать объект NSArray
, а не NSString
один.Так как NSArray
не реализует его, это вызывает эту ошибку и сбой.Что может быть трудно сказать, причина в том, что это внутренний скрытый код Какао, который вызывает length
(вы сами этого не видите).Но зная, где, и предполагая, что length
для объекта NSString
, и что преступник также является NSArray
объектом, вы можете определить проблему:
NSArray *tags = @[@"tag1", @"tag2"];
[parameters setValue:tags forKey:@"tags"];
Так что tags
необходимобыть NSString
объектом, а не NSArray
объектом.По вашему мнению, API должен вызываться с использованием JSON Stringified.Итак:
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"];