2011-05-30 58 views
1

我想要一個NSDictionary發送到服務器,並將它設置如下:設置ASHIHTTPRequest到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. 

哪個因爲媒體類型是字典中的第14個關鍵詞,所以令人困惑,那麼它怎麼能和其他所有的關係一樣好,然後在這個翻譯出來呢?

它似乎不接受我的詞典,但是有沒有原因?

+0

什麼是propertyvalues和propertykeys?他們裏面有什麼?我從來沒有嘗試過使用setValuesForKeysWithDictionary和ASIFormDataRequest,因爲這個方法來自NSOperation。你嘗試過使用addPostValue嗎? – shawnwall 2011-05-30 14:12:15

回答

2

有以下幾個原因:

  • 在字典中的鍵是沒有順序的。 [a]詞典中沒有這樣的東西。「字典條目必須被序列化以進行日誌記錄,但不能保證它們將以其他方法以相同順序被訪問。
  • ASIFormDataRequestASIHTTPRequest都不覆蓋-setValueForKeysWithDictionary:-setValue:forKey:。這意味着,除非按鍵匹配對象的鍵值編碼兼容鍵,否則您將看到該異常。

嘗試使用支持的方法,像-setPostValue:forKey:

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

和未來:使用THE SOURCE

+0

那麼,如何輕鬆地將字典的內容放入請求中,而無需單獨分配每個Post和Key? – Chris 2011-05-30 15:36:20

+1

如果你可以更新Web服務來處理它,你可以使用'+ [NSKeyedArchiver archivedDataWithRootObject:]'將字典存檔到'NSData',這意味着字典中的所有內容都必須符合'NSCoding',並且你的Web服務已經有權訪問相同的類來解壓檔案,或者使用'NSPropertyListSerialization'類將字典序列化爲plist,這意味着字典中的所有內容都必須僅使用plist類型進行序列化。任何Web服務都應該能夠反序列化XML plist。 – 2011-05-30 16:31:37

+0

我不想通過XML發送它,而是作爲http變量發送。歸檔仍然會爲此工作嗎? – Chris 2011-05-31 16:17:37

相關問題