Intereting Posts
Ссылка на две версии одной и той же библиотеки (те же символы) UITableViewCell выглядит во время работы по-разному, чем в InterfaceBuilder (на iPad) Невозможно вызвать инициализатор для типа UNNotificationCategory при переходе на iOS10 Реальный сценарий для реализации MVC vs MVVM vs VIPER для проектов на базе iOS «Запуск процесса не выполнен: при попытке запустить приложение» при запуске приложения AdHoc Класс Enum в быстром Соответствие набора слов, начинающихся с определенной строки с использованием предиката Потоковое PDF SDK для iOS через HTTP Частота обратного вызова MTAudioProcessingTapRef Phonegap 3.5 Загрузка файла / Перемещение не работает SCRecorder: как создать SCRecordSession из локального видео Невозможно получить значения из набора параметров в watchOS 2 Область настройки в MKMapView Установить цвет StatusBar для расширений в UIActivityViewController Почему обратная связь AVCaptureVideoDataOutput зависит от частоты кадров OpenGL?

RestKit RKObjectManager: getObjectsAtPath – пользовательская обработка

Я испытываю проблемы с RestKit 0.20, создавая дубликаты в моей базе данных при извлечении списка объектов с сервера. Объекты, созданные локально и отправленные на сервер, не обновляются, когда результаты сопоставления сохраняются, но дублируются. Я думаю, что это связано с этой ошибкой: https://github.com/RestKit/RestKit/issues/1613 , поэтому я ищу временное исправление, которое я должен отправить в ближайшее время. Когда результаты вернутся из

[myRKObjectManager getObjectsAtPath:path parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 

я могу отбирать дубликаты от этого до выполнения

  [myRKObjectManager.managedObjectStore.mainQueueManagedObjectContext saveToPersistentStore:&error]) 

? Я прорыл документацию и не понимаю, как отбирать ненужные вставки.

UPDATE: ответы на @Wain:

Установите таким образом:

 myRKobjectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:urlString]]; NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; NSError *error; NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:[RKApplicationDataDirectory() stringByAppendingPathComponent:[self databaseFilename]] fromSeedDatabaseAtPath:nil withConfiguration:nil options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} error:&error]; NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error); // Create the managed object contexts [managedObjectStore createManagedObjectContexts]; // Configure a managed object cache to ensure we do not create duplicate objects managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext]; // Set up response routing RKEntityMapping *partyMapping = [Party objectMappingInManagedObjectStore:managedObjectStore withCustomerMapping:customerMapping notificationMapping:notificationMapping]; RKResponseDescriptor *partyResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:partyMapping method:RKRequestMethodGET pathPattern:@"api/allparties" keyPath:@"parties" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; [[RKObjectManager sharedManager] addResponseDescriptor:partyResponseDescriptor]; 

Класс Entity объявлен:

 @interface Party : NSManagedObject<PostRequestDelegate> 

используя категорию

 NSManagedObject (ActiveRecord) 

Объект Party создается с использованием

 Party *newParty = [Party object]; 

и сохраняется в базе данных через:

  [myRKobjectManager.managedObjectStore.mainQueueManagedObjectContext saveToPersistentStore:&error] 

Используемые сопоставления:

 RKEntityMapping* partyMapping = [RKEntityMapping mappingForEntityForName:@"Party" inManagedObjectStore:managedObjectStore]; [partyMapping addAttributeMappingsFromDictionary:@{ @"added_date": @"addedDate", @"id": @"partyId", @"modified_date": @"modifiedDate", @"name": @"name", }]; partyMapping.identificationAttributes=@[@"addedDate"]; [partyMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"customer" toKeyPath:@"customer" withMapping:customerMapping]]; [partyMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"notification_history" toKeyPath:@"notifications" withMapping:notificationMapping]]; 

Вы пытались изменить свои идентификационные атрибуты на свой partyId? Я предполагаю, что это уникальный атрибут для каждого из ваших партийных объектов. Затем Restkit проверяет, существует ли объект с одним и тем же partyId в основных данных и обновляет его вместо создания нового объекта.

Прочтите раздел «Идентификация сущности» из документации по адресу http://restkit.org/api/latest/Classes/RKManagedObjectRequestOperation.html для получения более подробной информации о том, как это работает.