Установка ASHIHTTPRequest для NSDictionary - PullRequest
1 голос
/ 30 мая 2011

Я пытаюсь отправить NSDictionary на сервер и настроить его следующим образом:

NSDictionary *songInfo = [[NSDictionary alloc] initWithObjects:propertyValues forKeys:propertyKeys];

NSURL *exampleURL = [NSURL URLWithString:@"http://www.example.com/activities"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:exampleURL];

[request setValuesForKeysWithDictionary:songInfo];
[request startAsynchronous];

Я получаю следующую ошибку:

[<ASIFormDataRequest 0x1035600> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key 1 Media Type.

Чтоозадачивает, потому что Media Type является 14-м ключом в Словаре, так как же он мог бы быть в порядке со всеми остальными, а затем отключен на этом?

Кажется, он не принимает мой словарь, но есть липричина почему?

1 Ответ

2 голосов
/ 30 мая 2011

Существует несколько причин:

  • Ключи в словаре не упорядочены.Не существует такого понятия, как «14-й ключ в словаре».Записи в словаре должны быть сериализованы для регистрации, но нет никакой гарантии, что к ним будут обращаться в том же порядке другими методами.
  • Ни ASIFormDataRequest, ни ASIHTTPRequest не переопределяют -setValueForKeysWithDictionary: или -setValue:forKey:.Это означает, что, если ключи не соответствуют ключам объекта, соответствующим кодированию значения ключа, вы увидите это исключение.

Попробуйте использовать поддерживаемый метод, например -setPostValue:forKey::

NSDictionary *songInfo = /*...*/;
ASIFormDataRequest *request = /*...*/;
[songInfo enumerateKeysAndObjectsUsingBlock:
^(id key, id value, BOOL *stop) {
    [request setPostValue:value forKey:key];
}];

И в будущем: ИСПОЛЬЗОВАТЬ ИСТОЧНИК .

...