Intereting Posts
Список всех файлов и папок с Google Диска в DrEdit Как проверить, разрешено ли разрешение Firebase? iOS 7/8: Как настроить навигационную панель на чисто белый (#FFFFFF) и поддерживать прозрачность? Удалите контроллер просмотра из навигационного стека после нажатия segue (используя серию раскадровки) Как фильтровать уведомления ios push до их появления Программно переключаемые вкладки с использованием свойства selectedViewController JQuery Mobile Button Цвет не меняется Xcode 6.1. Снимите флажок и проверьте портретную ориентацию. Симулятор никогда не появляется в портретном режиме реагировать на родной ios: geoloc имеет низкую точность по умолчанию NSPredicate не работает над каким-либо объектом MPMoviePlayerController зависает, если фоновый звук активен Почему строки UITable не проверяются каждый раз, когда я просматриваю iOS UIDatePicker за время возвращает очень странные результаты как преобразовать изображение в base64 без потери изображения в swift 2.0? Заголовок навигационной панели Autoshrink Название iOS 7 или более поздней версии

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 для получения более подробной информации о том, как это работает.