사례가 매우 간단합니다. 나는 ✓이 가령하는 MagManRecord로 RestKit에서 비롯된 NSManagedObject를 삭제할 수 없습니다
- 필요 postObject : Restkit에서 방법 ✓는 ✘, ✓
- 프로세스 작동 IT와, ✓
- 요청 및 MR_deleteEntity를 사용하여 응답 개체 모두 삭제 작동
- 가 완료된 블록 NSManagedObject 응답을 수신 작동 작동하지 않습니다.
엔티티를 생성/삭제/관리하는 데 MagicalRecord 만 사용하고 싶습니다.
문제 :
내가 비동기 MagicalRecord 툴킷에서 방법 저장하고 난 후 응용 프로그램을 종료 나는 여전히 SQLite는 DB 파일의 실체를 볼 수 있습니다 전화. 응용 프로그램을 다시 시작한 후 객체에 대해 MR_deleteEntity를 명시 적으로 호출했지만 새 객체가 단일 인스턴스를 삭제하지 않고 db에 추가되었습니다. 컨텍스트 관리는 내가 아직 완전히 이해하지 못했던 것임을 인정합니다.
나는 Restkit와 MagicalRecord를 연결하려면 다음 설정을 사용하고 있습니다 :
// 1. Setup the core data stack with the automigration
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:[GVUserDefaults standardUserDefaults].applicationStoreName];
// 2. Initialize managed object store
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithPersistentStoreCoordinator:[NSPersistentStoreCoordinator MR_defaultStoreCoordinator]];
// 3. create the persistentStoreManagedObjectContext and the mainQueueManagedObjectContext:
[managedObjectStore createManagedObjectContexts];
// 4. set the default and the root saving context:
[NSManagedObjectContext MR_defaultStoreCoordinator:managedObjectStore.mainQueueManagedObjectContext];
[NSManagedObjectContext MR_setRootSavingContext:managedObjectStore.persistentStoreManagedObjectContext];
// 5. create RestKit manager:
self.rkManager = [TSNRKObjectManager managerWithBaseURL:[NSURL URLWithString:[self serverURL]]];
self.rkManager.requestSerializationMIMEType = RKMIMETypeJSON;
self.rkManager.managedObjectStore = managedObjectStore;
질문
나는 요청을 삭제하려고하고 응답 객체를 이런 식으로 :
[self saveWithBlock:^(NSManagedObjectContext *localContext) { // calls [MagicalRecord saveWithBlock:block completion:completion]
// some additional processing, getting data from the response
[loginResponse MR_deleteEntity];
[loginRequest MR_deleteEntity];
} completion:^(BOOL success, NSError *error) {
// some additional processing
}];
그러나 나는 항상 로그에이 메시지가 : 나는 참조 https://gist.github.com/tonyarnold/4694673이 페이지를 사용하고
-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x110906470) NO CHANGES IN ** UNNAMED ** CONTEXT - NOT SAVING
. 요청 및 응답 엔티티 생성 컨텍스트는 동일합니까? 엔티티 생성을 위해 Restkit은 어떤 컨텍스트를 사용합니까? [MagicalRecord saveWithBlock : 블록 완료 : 완료]에서 요청 엔터티를 블록 내에 만들어야합니까? https://github.com/blakewatters/RKMagicalRecord의 예에는 자동 마이그레이션 설정 및 비동기 저장 방법이 포함되어 있지 않습니다.
UPDATE :
이 수용 가능한 해결책? (깨끗하고 우아한 삭제를 의미합니다) :
[self.loginRequest MR_deleteEntity];
[self.loginRequest.managedObjectContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
// log
}];
[self.loginResponse MR_deleteEntity];
[self.loginResponse.managedObjectContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
// log
}];
나는 이것을 테스트했으며 작동합니다. 완료 블록에서 2
UPDATE는 Restkit의 postObject에서 트리거 : ...
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
[[self.loginRequest MR_inContext:localContext] MR_deleteEntity];
[[self.loginResponse MR_inContext:localContext] MR_deleteEntity];
} completion:^(BOOL success, NSError *error) {
if(success) {
self.loginRequest = nil;
self.loginResponse = nil;
// log, update ui
} else {
// log error
}
}];
안녕하세요, 포인터 주셔서 감사합니다. 이것이 받아 들일만한 해결책입니까? (나는 깨끗하고, 우아한 삭제를 의미한다) : 업데이트를 참조하십시오. –
괜찮습니다. 두 번의 삭제가 모두 끝난 후에 한 번만 두 번 저장하면 안됩니다 (작은 일괄 저장 및 두 개체가 같은 컨텍스트에 있음). – Wain
내가 이해할 수없는 사실은 내가 삭제하고자하는 엔티티와 관련된 저장 컨텍스트가 rootsavingcontext (백그라운드 작업) 또는 이전에 설정 한 defaultContext (ui 업데이트) (setDefaultContext, setRootSavingContext)의 컨텍스트가 아니라는 사실입니다. –