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];