我基本上構建我的應用程序,就像您可以從AFNetworking 2.0 GitHub下載的AFNetworking示例一樣。但是,在過去的AFNetworking 1.0中,當我做了一個客戶端網絡擴展類時,我不得不指定initWithBaseURL
,我可以設置可接受的內容類型。AFNetworking 2.0設置內容類型
在2.0中,似乎在該示例中不再有此實例方法。所以,當我使用網絡服務,我得到錯誤[1] (null) @"NSLocalizedDescription" : @"Request failed: unacceptable content-type: text/html"
我試過不使用AFClient類的方法,它的工作原理,但我想設置它像例子,所以我可以有更好的代碼重用。
我在哪裏可以設置contentType?此外,在2.0的例子中,它們有一個塊調用 + (NSURLSessionDataTask *)globalTimelinePostsWithBlock:(void (^)(NSArray *posts, NSError *error))block {
在返回類型爲void
之前。返回NSURLSessionDataTask
的目的是什麼?
關於你提到的關於第二個問題'globalTimelinePostsWithBlock',如果你看一下它是如何在演示中使用,你會看到,他們再通過任務對象,以'UIAlertView中+ AFNetworking'方法'showAlertViewForTaskWithErrorOnCompletion'。如果你沒有得到任務對象,你就無法做到這一點。事實上,這是AFNetworking 1.x方法(比如'+ [AFHTTPClient getPath:...]')的問題之一,他們在真正需要返回對象的情況下使用了'void'。 – Rob
@Rob感謝你的迴應,所以它基本上是說如果在通話中有錯誤,顯示一個alertview?這真的有什麼大的優勢嗎?我不能只在'if(!error)'之後放一個'else',並用'[error description]'顯示一個'UIAlertview',就像在AF1.0中完成的那樣? – Alan
我可以看到的唯一明顯的優勢是,如果任務已添加到後臺會話中(因爲獲取任務標識符是在應用程序重新啓動後重新實例化警報的唯一方法,但您必須存儲任務標識符在持久存儲中)。無論如何,我認爲作爲一個通用的設計原則,總是返回相關的對象是有意義的,因爲你永遠不知道你將來何時需要它。我認爲1.x在許多應該返回對象的情況下返回void。這在2.0中得到了一些補救。 – Rob