Restkit отображает пустой список json с отношениями

У меня проблема с отображением пустого списка 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;
}

Отображение для класса Restriction:

    +(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. Кто-нибудь знает, как это сделать? это вообще возможно?


person AnderCover    schedule 08.07.2013    source источник
comment
Расскажите о своей модели данных. Являются ли restricted_position_detail и restricted_time_detail трансформируемыми атрибутами или отношениями. Какие атрибуты установлены как необязательные?   -  person Wain    schedule 08.07.2013
comment
limited_position_detail и limited_time_detail не являются необязательными отношениями ко многим, ориентированными соответственно на классы GeographicArea и TimeSlot. Классы ограничений содержат только те два отношения и обратное отношение с моим классом PLCategory.   -  person AnderCover    schedule 08.07.2013


Ответы (1)


Проблема в том, что вы сделали отношения необязательными. По умолчанию они будут пустыми наборами (не массивами), но если вы попытаетесь сохранить, когда наборы пусты, вы получите ошибки проверки, потому что вы настроили, что отношения должны иметь хотя бы одно соединение (вот что означает необязательность).

Если вы хотите разрешить нулевые соединения, сделайте отношения необязательными.

Обратите внимание, что вы можете не захотеть сделать другой конец отношений необязательным, поэтому вы знаете, что если у вас есть GeographicalArea или TimeSlot, то он должен быть подключен к Restriction. Обычно это связано с правилом удаления Cascade.

person Wain    schedule 08.07.2013
comment
Спасибо, Уэйн. Я думал о том, чтобы сделать свои отношения необязательными, но, поскольку мой документ сказал, что они должны быть обязательными, я искал способ сохранить пустой набор. Теперь я знаю, что невозможно перейти к какому-то другому вопросу. - person AnderCover; 08.07.2013