1

私が時々サーバーから受け取るレスポンスは、この {} のような空のオブジェクトを表す JSON です。

私はすでにこの質問/回答をここで読みました。これは、willMapData デリゲート関数を実装し、*mappableData を別の場所にポイントする必要があると述べています。問題は、アプリがクラッシュしないように *mappableData に何を割り当てる必要があるのか​​ わかりません。

私はこれを試しました

- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout id *)mappableData
{
    id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON]; 
    *mappableData = [parser objectFromString:@"{\"unknownObject\":\"\"}" error:nil];
}

それにもかかわらず、私のアプリはかなり小便でクラッシュします

    'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary   initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]

あなたは私を助けることができます?

更新 RKDebug メッセージをオンにすると、コンソールに次のように表示されます。

Performing object mapping sourceObject: {
    }
and targetObject: (null)

その後、コードは RKObjectMapper.m に到達します。

if (mappableData) {
        id mappingResult = [self performMappingForObject:mappableData atKeyPath:@"" usingMapping:mappingsForContext];
        foundMappable = YES;
        results = [NSDictionary dictionaryWithObject:mappingResult forKey:@""];
    }

しかし、そこのmappingResultはnilに戻ってきます...そのため、nilオブジェクトでNSDictionaryを作成しようとするとアプリがクラッシュします。

4

1 に答える 1

1

割り当てを 2 行に分割します。

SomeDataType *object =  [parser objectFromString:@"{\"unknownObject\":\"\"}" error:nil];

if(object){
  *mappableData = object;
}else{
  // You've got nil, do something with it
}

これで、nil 値をチェックして、適切なアクションを実行できます。そのアクションが何であるかは、クラッシュのコンテキストによって異なります。

于 2012-08-21T00:12:20.527 に答える