서버에서 개체 목록을 가져올 때 RestKit 0.20에서 데이터베이스에 중복 항목을 만드는 데 문제가 있습니다. 로컬로 생성하고 서버에 보낸 개체는 매핑 결과를 저장할 때 업데이트되지 않고 대신 복제됩니다. 나는 그것이이 버그와 관련이 있다고 생각한다 : https://github.com/RestKit/RestKit/issues/1613, 나는 잠시 후에 나올 임시 패치를 찾고있다. 결과가RestKit RKObjectManager : getObjectsAtPath - 사용자 지정 처리
[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 *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",
}];
[email protected][@"addedDate"];
[partyMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"customer" toKeyPath:@"customer" withMapping:customerMapping]];
[partyMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"notification_history" toKeyPath:@"notifications" withMapping:notificationMapping]];
어떤 매핑을 사용하고 있습니까? 다중 컨텍스트로 작업하고 있습니까? 로컬에서 생성 된 객체를 어떻게 저장하고 있습니까? – Wain
@Wain 더 많은 설정 정보로 게시물을 업데이트했습니다. 감사! –
RestKit에서 만드는 대신 자신 만의 컨텍스트를 만드는 이유는 무엇입니까? – Wain