0

サーバーから取得したレスポンスボディをストーリーボードに表示したいのですが、このように接続しています。アプリを実行すると、次の応答が返されます。

response.body={"id":2,"token":"xyzzyzzyx"}
2013-11-05 11:36:52.405 networkTest3[1327:70b] It Worked: (
    "<LoginResponse: 0x8b508a0>"
)

CoffeeShopの例に従って、マスタービューでLoginResponseからのデータを表示しようとしていますが、RestKitのバージョンが原因で多くのことが異なるようです(現在、最後のバージョン0.20を使用しています)。クラスからインターフェイスのアウトレットにデータを接続する方法は既に知っていますが、応答本文からデータを取得する方法がわかりません。

クラスLoginResponseのこのメソッドでそれをやろうとしています

- (void)loadToken{
    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[LoginResponse class]];

    [mapping addAttributeMappingsFromDictionary:@{
                                                  @"id":   @"status",
                                                  @"token":   @"token",
                                                  }];
        RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:nil keyPath:@"" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    NSURL *URL = [NSURL URLWithString:@"http://myurl.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];

    [objectRequestOperation start];
}

そして、私はこれを得ました:

2013-11-05 12:09:56.867 networkTest3[1585:3307] E restkit.network:RKObjectRequestOperation.m:576 Object request failed: Underlying HTTP request operation failed with error: (null)

私の次のステップは何ですか?

編集:これを LoginManager.m に追加しようとしました

[responseMapping addAttributeMappingsFromDictionary:@{@"id" : @"id", @"token" : @"token"}];

しかし、私は得ました

libc++abi.dylib: terminating with uncaught exception of type NSException
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to add mapping for keyPath token, one already exists...'
4

1 に答える 1

0

作成している結果にヘッダーを設定していないため、サーバーはリクエストに適切に応答する方法を知りません。null エラーの場合、それ以上のことはわかりません。マッピングは問題ないように見え、適切なオブジェクトが作成されたことをログが示しています。

リクエストに少なくともAcceptsヘッダーを設定するか、 を使用しRKObjectManagerてリクエスト管理を処理することを検討してください。


それが実際のエラーではなく、マッピングが機能している場合 (基本的には問題ないように見えます)、問題は呼び出しを行っていsetCompletionBlockWithSuccess:failure:ないため、マッピング プロセス中に作成されたオブジェクトでコールバックを取得できないことです。

繰り返しますが、これを使用RKObjectManagerすると、これを処理しやすくなり、忘れたり見逃したりするのが難しくなります...

于 2013-11-05T23:10:00.273 に答える