1

次のように、Web サービスからネイキッド JSON 配列でいくつかの URL を取得しています。

[
    "https://server1.com",
    "https://server2.com"
]

これらを個別のコア データ エンティティにマップしたいのですが、アサーション エラーが発生しています。

I restkit.network:RKObjectRequestOperation.m:180 GET 'https://server-test.com/Client/Endpoints'
*** Assertion failure in NSDictionary *RKEntityIdentificationAttributesForEntityMappingWithRepresentation(RKEntityMapping *__strong, NSDictionary *__strong)(), /Users/jonukas/MyApp/Pods/RestKit/Code/CoreData/RKManagedObjectMappingOperationDataSource.m:83
An uncaught exception was raised
Expected a dictionary representation

FWIW、ブレークポイントをオンに設定するRKManagedObjectMappingOperationDataSource.m:83と、あるべき表現NSDictionaryが実際にはであることが示されますRKMappingSourceObject

私が作成したマッピングは次のとおりです。

RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"MyURL"
                                               inManagedObjectStore:self.manager.managedObjectStore];

[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil
                                                                  toKeyPath:@"url"]];

RKResponseDescriptor *descriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping
                                                                                method:RKRequestMethodGET
                                                                           pathPattern:@"Client/Endpoints"
                                                                               keyPath:nil
                                                                           statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[self.manager addResponseDescriptor:descriptor];

私のエンティティには、変換可能なタイプの属性 (url) が 1 つだけあります。NSManagedObjectサブクラスは次のとおりです。

@interface MyURL : NSManagedObject

@property (nonatomic, retain) id url;

@end

マッピングが間違っているのでしょうか、それともエンティティの説明/オブジェクト モデルに問題がありますか (コア データを使い始めたばかりです)。

更新:識別属性を設定しようとしましたが、役に立たなかったようです:

[mapping setIdentificationAttributes:@[@"url"]];

トレース ログを有効にすると、次のRestKit/ObjectMapping結果が得られます。

D restkit.object_mapping:RKMapperOperation.m:377 Executing mapping operation for representation: (
    "https://server1.com",
    "https://server2.com"
)
 and targetObject: (null)
T restkit.object_mapping:RKMapperOperation.m:320 Examining keyPath '<null>' for mappable content...
D restkit.object_mapping:RKMapperOperation.m:297 Found mappable collection at keyPath '<null>': (
    "https://server1.com",
    "https://server2.com"
)
*** Assertion failure in NSDictionary *RKEntityIdentificationAttributesForEntityMappingWithRepresentation(RKEntityMapping *__strong, NSDictionary *__strong)(), /Users/jonukas/MyApp/Pods/RestKit/Code/CoreData/RKManagedObjectMappingOperationDataSource.m:83
…

(null) targetObject が私の問題かもしれないと推測しています。

更新 2: RestKit 0.21.0 で問題が修正されました。

4

1 に答える 1

2

urlCore Data モデルの属性をタイプに変更しますStringtransformableRestKitに設定すると、データ型がどうあるべきかを適切に解釈できないため、辞書を選択し、かなり混乱します。

が必要なため、変換可能に設定していると思いますNSURL。RestKit はそれを行うことができないため、一時的な属性を使用してその目標を達成する必要があります。

于 2013-09-30T20:24:48.323 に答える