RestKit удаляет старые данные из основных данных с помощью setObjectMapping

Я просмотрел ответ на RestKit Object Mapping :трудность с использованием setObjectMapping :forResourcePathPattern :withFetchRequestBlock , и он работает, но только для последнего сопоставления. Пример:

RKManagedObjectMapping *audioSourcesMapping = [RKManagedObjectMapping mappingForEntityWithName:kEntityAudioSources inManagedObjectStore:objectStore];
[audioSourcesMapping mapKeyPath:@"icon" toAttribute:@"icon"];
[audioSourcesMapping mapKeyPath:@"name" toAttribute:@"name"];
[audioSourcesMapping mapKeyPath:@"notes" toAttribute:@"notes"];
[audioSourcesMapping mapKeyPath:@"section" toAttribute:@"section"];
[audioSourcesMapping mapKeyPath:@"url" toAttribute:@"url"];
audioSourcesMapping.primaryKeyAttribute = @"name";
[wsiObjectManager.mappingProvider registerMapping:audioSourcesMapping withRootKeyPath:@"winSystem.winSystemAudioSources.winSystemAudioSource"];


[wsiObjectManager.mappingProvider setObjectMapping:audioSourcesMapping forResourcePathPattern:kWinSystemInfoXml 
                             withFetchRequestBlock:^NSFetchRequest *(NSString *resourcePath) {
                                 return [AudioSources fetchRequest];
                             }];


RKManagedObjectMapping *eventsMapping = [RKManagedObjectMapping mappingForEntityWithName:kEntityEvents inManagedObjectStore:objectStore];
[eventsMapping mapKeyPath:@"contact" toAttribute:@"contact"];
[eventsMapping mapKeyPath:@"startDate" toAttribute:@"startDate"];
[eventsMapping mapKeyPath:@"endDate" toAttribute:@"endDate"];
[eventsMapping mapKeyPath:@"icon" toAttribute:@"icon"];
[eventsMapping mapKeyPath:@"location" toAttribute:@"location"];
[eventsMapping mapKeyPath:@"name" toAttribute:@"name"];
[eventsMapping mapKeyPath:@"notes" toAttribute:@"notes"];
[eventsMapping mapKeyPath:@"section" toAttribute:@"section"];
[eventsMapping mapKeyPath:@"url" toAttribute:@"url"];
eventsMapping.primaryKeyAttribute = @"name";
[wsiObjectManager.mappingProvider registerMapping:eventsMapping withRootKeyPath:@"winSystem.winSystemEvents.winSystemEvent"];    


[wsiObjectManager.mappingProvider setObjectMapping:eventsMapping forResourcePathPattern:kWinSystemInfoXml 
                             withFetchRequestBlock:^NSFetchRequest *(NSString *resourcePath) {
                                 return [Events fetchRequest];
                             }];

Все карты работают отлично. При обновлении исходного xml создаются новые записи. Когда я удаляю Event, он удаляется. Когда я удаляю AudioSource, он не удаляется.

Если я удалю второй setObjectMapping:forResourcePathPattern:withFetchRequestBlock, то AudioSourceудаляется правильно, а удаленный Event— нет. У меня есть 4 сопоставления, с которыми я работаю в этом XML-файле.

Это похоже на то, что последний звонок на setObjectMapping:forResourcePathPattern:withFetchRequestBlockпобеждает.

Мой обходной путь — использовать setObjectMapping:forResourcePathPattern:withFetchRequestBlockдля отображения, которое меняется чаще всего (, в данном случаеEvents)и добавьте кнопку, которая аннулирует кеш, очистит базу данных и обновит. Должно быть что-то простое, что мне не хватает.

Xcode :4.3.3 РестКит :0.10.1

Пример xml-файла. Все это загружается нормально, но только удаляет из основных данных сопоставление, используя последнийsetObjectMapping:forResourcePathPattern:withFetchRequestBlock

    
    
        
            
        
        
            
        
        
            
        
        
            
        
    

10
задан Community 23 May 2017 в 12:22
поделиться