0

RestKit GET中に(予想される)nilキーパスを適切に処理するにはどうすればよいですか?

ユーザーにイベントがない場合にgetAllEventsAPI呼び出しを行うと、APIはペイロードにnull値を返します{"events":null}。null値を指定すると、RestKitrequest: didFailLoadWithErrorobjectLoader: didFailWithErrorメソッドが呼び出されますが、これはイベントが0の場合に予想される動作であるため、必ずしも必要ではありません。表示されるエラーメッセージはですCould not find an object mapping for keyPath: ''

マッピング設定やデリゲートメソッドでこれを処理できますか、またはAPIを変更する必要がありますか?おそらくnullではなく空の文字列を返します。リストが空の場合にJSONが返す必要のある標準はありますか?

4

2 に答える 2

2

リストが空の場合にJSONが返す必要のある標準はありますか?

実際にはわかりませんが、空の配列を使用します。

{ 'events' : [] }

値がnullの場合、[帯域幅を節約する]ことはまったく送信しません。

編集:この答えも参照してください

于 2012-09-13T23:53:54.360 に答える
1

更新:これは、RestKitv0.10.x以降では機能しなくなりました。@moonwave99の答えを参照してください。

解決策を見つけました!

nullオブジェクトを空の配列に変更していることを除けば、moonwaveの提案と非常によく似た処理を行うことになりました。

- (void)objectLoader:(RKObjectLoader*)loader willMapData:(inout id *)mappableData {

  id events = [*mappableData objectForKey:@"events"];

  if (events == [NSNull null]) {
    NSLog(@"it's null");
    [*mappableData setObject:@"" forKey:@"events"];
  }
}

nullではなく空の配列を正常に処理するには、不明なキーパスを無視するようにイベントマッピングに指示する必要がありました。

[eventsMapping setIgnoreUnknownKeyPaths:YES];

これで、didFailWithErrorデリゲートメソッドを呼び出す代わりに、RestKitは私がずっと期待/期待していたようにdidLoadObjectsを呼び出します。そこから、ネイティブのCocoaオブジェクトに割り当てる前に、配列が空かどうかを確認できます。

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {

  if ([objects count] == 0) {

    // No events, alert user

  }
  else if ([[objects objectAtIndex:0] isKindOfClass:[Events class]]) {

    Events *events = [objects objectAtIndex:0];

}
于 2012-09-14T02:51:18.247 に答える