4

plist を返す WS があります。
Restkit を使用しており、応答をマッピングしたいと考えています。

まず、ObjectManager を次のように初期化します。

sharedInstance.manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:ROOT_URL]];

text/xml を受け入れます。

[[RKObjectManager sharedManager] setAcceptHeaderWithMIMEType:RKMIMETypeTextXML];

そして、リクエストを開始します。

NSMutableURLRequest *request = [[RKObjectManager sharedManager] requestWithObject:nil method:RKRequestMethodPOST path:@"/foo/foo" parameters:nil];
RKManagedObjectRequestOperation *operation = [[RKObjectManager sharedManager] managedObjectRequestOperationWithRequest:request managedObjectContext:[BddManager sharedInstance].manager.managedObjectStore.mainQueueManagedObjectContext success:^(RKObjectRequestOperation *operation, RKMappingResult *result) {
    NSLog(@"Loading mapping result: %d", result.count);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSLog(@"Fail!");
}];
[operation start];

最後に、次のエラーが表示されます。

NSLocalizedDescription=Expected content type {(
"application/x-www-form-urlencoded",
"application/json"
)}, got text/xml, 

私は何を間違っていますか?

4

2 に答える 2

10

RestKit 0.20.0rc1 のメイン リポジトリには XML シリアライザーが含まれていませんが、次の場所にあります: RKXMLReaderSerialization

cocoapods 経由でインストール: (またはソース ファイルをプロジェクトに追加)

pod 'RKXMLReaderSerialization', :git => 'https://github.com/RestKit/RKXMLReaderSerialization.git', :branch => 'master'

RestKit を初期化するヘッダーをインポートします。

#import "RKXMLReaderSerialization.h"

最後に、シリアル化クラスを RestKit に登録します。これは、オブジェクト マネージャを初期化した後、accept ヘッダーを設定する前に挿入します。

sharedInstance.manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:ROOT_URL]];
[RKMIMETypeSerialization registerClass:[RKXMLReaderSerialization class] forMIMEType:@"application/xml"];
[[RKObjectManager sharedManager] setAcceptHeaderWithMIMEType:RKMIMETypeTextXML];
于 2013-02-28T17:41:36.683 に答える
0

1)ロードプロセス後にシリアル化されるデータを処理する方法をRKObjectManagerに指示する必要があります。

[objectManager setRequestSerializationMIMEType:RKMIMETypeTextXML];

編集:

リクエストについて話しているのを見ましたが、POSTを介してオブジェクトをWSに送信するためのメソッドを使用しています。

サーバーからオブジェクトを取得するには、RestKitのサンプルアプリケーションで提供されている次のメソッドを使用します。

[[RKObjectManager sharedManager] getObjectsAtPath:@"yourPath" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    // Success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    // Error
    RKLogError(@"Load failed with error: %@", error);
}];
于 2013-02-14T21:40:08.587 に答える