0

空の json リスト マッピングに問題があります。次のような JSON 応答があります。

{
    id = 1;
    image = "http://image.com/image.png";
    name = "Test Category #1";
    "restricted_position" = 0;
    "restricted_time" = 0;
    restrictions =         {
        "restricted_position_detail" =             (
        );
        "restricted_time_detail" =             (
        );
    }

クラスのマッピングは次のようになります。

    +(RKManagedObjectMapping *)getObjectMapping
{
    RKObjectRelationshipMapping *restrictionMapping = [RKObjectRelationshipMapping mappingFromKeyPath:@"restrictions" toKeyPath:@"restrictions" withMapping:[Restriction getObjectMapping]];

    RKManagedObjectMapping *mapping = [RKManagedObjectMapping mappingForClass:[PLCategory class] inManagedObjectStore:[RKObjectManager sharedManager].objectStore];
    [mapping mapKeyPath:@"id" toAttribute:@"identifiant"];
    [mapping mapKeyPath:@"name" toAttribute:@"name"];
    [mapping mapKeyPath:@"image" toAttribute:@"imageUrl"];
    [mapping mapKeyPath:@"restricted_position" toAttribute:@"restricted_position"];
    [mapping mapKeyPath:@"restricted_time" toAttribute:@"restricted_time"];

    [mapping addRelationshipMapping:restrictionMapping];
    [mapping setPrimaryKeyAttribute:@"identifiant"];

    return mapping;
}

制限クラスのマッピング:

    +(RKManagedObjectMapping *)getObjectMapping
{
    RKObjectRelationshipMapping *zg_mapping = [RKObjectRelationshipMapping mappingFromKeyPath:@"restricted_time_detail" toKeyPath:@"restricted_time_detail" withMapping:[GeographicalArea getObjectMapping]];
    RKObjectRelationshipMapping *ph_mapping = [RKObjectRelationshipMapping mappingFromKeyPath:@"restricted_position_detail" toKeyPath:@"restricted_position_detail" withMapping:[TimeSlot getObjectMapping]];
    RKManagedObjectMapping *mapping = [RKManagedObjectMapping mappingForClass:[Restriction class] inManagedObjectStore:[RKObjectManager sharedManager].objectStore];
    [mapping addRelationshipMapping:zg_mapping];
    [mapping addRelationshipMapping:ph_mapping];

    return mapping;
}

何を試しても、これらの迷惑なエラーが発生し続けます:

Core Data Save Error
                               NSLocalizedDescription:      The operation couldn’t be completed. (Cocoa error 1580.)
                               NSValidationErrorKey:            restricted_position_detail
                               NSValidationErrorPredicate:  (null)
                               NSValidationErrorObject:
<Restriction: 0xb9c2f20> (entity: Restriction; id: 0xb9b5d90 <x-coredata:///Restriction/tE6CDEA6C-5A2A-48AE-9454-A8E6CC35F5078> ; data: {
    category = "0xb9b67b0 <x-coredata:///PLCategory/tE6CDEA6C-5A2A-48AE-9454-A8E6CC35F5077>";
    "restricted_position_detail" =     (
    );
    "restricted_time_detail" =     (
    );
})
2013-07-08 12:39:00.716 [7442:28513] E restkit.core_data:RKManagedObjectStore.m:263 Core Data Save Error
                               NSLocalizedDescription:      The operation couldn’t be completed. (Cocoa error 1580.)
                               NSValidationErrorKey:            restricted_time_detail
                               NSValidationErrorPredicate:  (null)
                               NSValidationErrorObject:
<Restriction: 0xb9c2f20> (entity: Restriction; id: 0xb9b5d90 <x-coredata:///Restriction/tE6CDEA6C-5A2A-48AE-9454-A8E6CC35F5078> ; data: {
    category = "0xb9b67b0 <x-coredata:///PLCategory/tE6CDEA6C-5A2A-48AE-9454-A8E6CC35F5077>";
    "restricted_position_detail" =     (
    );
    "restricted_time_detail" =     (
    );
})

私がやりたいのは、これらの空のリストを空の NSArray にマップすることです。誰もそれを行う方法の手がかりを持っていますか? それは可能ですか?

4

1 に答える 1

1

問題は、関係をオプションではないものにしたことです。デフォルトでは、それらは空のセット (配列ではない) になりますが、セットが空のときに保存しようとすると、関係に少なくとも 1 つの接続が必要であると構成されているため、検証エラーが発生します (これは、オプションではないという意味です)。

ゼロ接続を許可する場合は、関係をオプションにします。

リレーションシップのもう一方の端をオプションではないものにしたくない場合があることに注意しGeographicalAreaTimeSlotくださいRestrictionCascadeこれは通常、削除ルールと結びついています。

于 2013-07-08T11:28:58.223 に答える