2

RKObjectMapping と対応する辞書がある RestKit 0.24.0 を使用して、JSON NSString をオブジェクトにマップしようとしています。

オンラインのソリューションのほとんどは、RestKit 0.22 以下を参照しています。

SO のソリューションの一部は、アプリのクラッシュを引き起こします。

ローカル文字列をオブジェクトに変換する最も簡単な方法は何ですか? 次のことを考慮してください

コードの更新

    RKMapperOperation *mapper = [[RKMapperOperation alloc] initWithRepresentation:parsedData mappingsDictionary:[RJobObject mappingDictionary]];
    RJobObject * rrrr = [[RJobObject alloc] init];
    mapper.targetObject = rrrr;
    //mapper.mappingOperationDataSource = parsedData;


    [mapper execute:nil];

ここでmappingDictionaryは、基本的に JSON キーとオブジェクト変数名の間で一致するキーと値のペアです。したがって、上記のコードで を実行するたびにexecute、アプリがクラッシュします。

スタックトレース

    2015-11-22 09:12:29.193 Help[22427:699579] -[__NSCFConstantString forceCollectionMapping]: unrecognized selector sent to instance 0x1022736a0
    2015-11-22 09:12:29.211 Help[22427:699579] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString forceCollectionMapping]: unrecognized selector sent to instance 0x1022736a0'
    *** First throw call stack:
    (
     0   CoreFoundation                      0x0000000105d7dc65 __exceptionPreprocess + 165
     1   libobjc.A.dylib                     0x0000000105a14bb7 objc_exception_throw + 45
     2   CoreFoundation                      0x0000000105d850ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
     3   CoreFoundation                      0x0000000105cdb13c ___forwarding___ + 988
     4   CoreFoundation                      0x0000000105cdacd8 _CF_forwarding_prep_0 + 120
     5   Help                                0x000000010212f424 -[RKMapperOperation mapRepresentationOrRepresentations:atKeyPath:usingMapping:] + 132
     6   Help                                0x000000010212fe97 -[RKMapperOperation mapSourceRepresentationWithMappingsDictionary:] + 1959
     7   Help                                0x00000001021307a2 -[RKMapperOperation main] + 1330
     8   Foundation                          0x00000001034c4774 -[__NSOperationInternal _start:] + 645
     9   Help                                0x00000001021310b7 -[RKMapperOperation execute:] + 39
     10  Help                                0x0000000101f62f8e -[AppDelegate fetchJobsFromDB] + 1102

詳細

に更新しましたがRestKit 0.26.0、まだ問題に直面しています。

基本的に、333RKMapperOperation.m行目でエラーが発生し、アプリがクラッシュしました。po mapping.forceCollectionMapping

ANSWER :RKMappingOperation keyPath を指定する必要がないため、 Sample Solution Use を使用します。

    RJobObject * rrrJob = [RJobObject new];
    RKMappingOperation *mappingOperation = [[RKMappingOperation alloc] initWithSourceObject:jobEntity.dictionary destinationObject:rrrJob mapping:[RJobObject mapping]];
    mappingOperation.dataSource = (id)rrrJob;
    [mappingOperation start];
4

1 に答える 1

1

あなたがやろうとしているのは、「parsedData」はJSON文字列から逆シリアル化された辞書または配列である[RJobObject mappingDictionary]必要があり、キーがソースキーパスであり、値がRKMapping何をするかを定義するインスタンスである辞書である必要がありますコンテンツ。

キー パスによって JSON データにドリルダウンする方法が決定され、マッピングによってそこにあるコンテンツの処理方法が決定されるという考え方です。JSON データ全体を処理する場合は、キー パスが空の文字列になることがあります。

RKMappingOperationキー パスの複雑さを避けたい場合や、JSON 全体を単一のターゲット オブジェクトにマッピングする場合は、代わりに使用することを検討してください。

于 2015-11-22T13:05:15.743 に答える