0

어떻게 임시 저장된 CoreData를 관리 할 수 ​​있습니까? 최대한 빨리 이런 식으로 뭔가처럼 :임시 저장된 managedObjectContext 제거

var myClass: MyClass = NSEntityDescription.insertNewObjectForEntityForName("MyClass", inManagedObjectContext: (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!) as MyClass 

내 managedObjectContext의 일부입니다 그리고 난이 context.save(nil) 내 현재 덤비는없이 NSManagedObject 클래스의 객체를 얻을 수있는 방법이 있습니까 수행 할 때 저장됩니다 문맥. 다른 말로하면 : 나는 명시 적으로 저장하지 않을 때 사용하지 않는 옵션 객체를 갖고 싶습니다. 그리고 객체를 영구히 저장하고 싶습니다.

답변

2

업데이트 된 개체를 제거 할 수있는 직접적인 방법은 실제 데이터 (업데이트하기 전에 이전 데이터)로 다시 업데이트하는 것입니다. 'NSManagedObject'(핵심 데이터 엔티티 개체)의 개체를 업데이트 할 때마다 'NSManagedObjectContext'가 모든 변경 사항을 캡처하고 컨텍스트를 저장할 때마다 저장합니다.

이 유형의 사용 사례에서는 Sqlite 데이터베이스를 사용하는 것이 더 좋습니다.

+0

답변 해 주셔서 감사합니다! "실제 데이터로 다시 업데이트"한다는 것은 정확히 무엇을 의미합니까? – iVentis

+0

데이터 저장을 원하지 않을 때 컨텍스트를 저장하지 마십시오. 원래 데이터 (실제 데이터)로 저장된 컨텍스트를 저장 컨텍스트를 업데이트하기 전에 새 entity.but를 만들었 기 때문에 컨텍스트를 저장하려는 경우에도 컨텍스트를 저장하지 마십시오. . –

+0

하지만 개체를 ​​어떻게 업데이트합니까? 그리고 어떤 종류의 물건을 의미합니까 ?? – iVentis

0

context.save을 호출하기 전에 관리 컨텍스트에서 개체를 삭제하면 커밋되지 않습니다. 당신이 NSManagedObjectContextcontext 전화를 MyClass의 인스턴스가 myClass라는이 가정하면, 그 다음은 작동합니다

context.deleteObject(myClass)

참조 :

NSManagedObjectContext.deleteObject

토론

. 객체가 아직 영구 저장소에 저장되지 않은 경우 단순히 수신기에서 제거됩니다.

물론 저장할 개체와 삭제할 개체에 대한 결정은 응용 프로그램의 논리에 달려 있습니다. 그러므로 save를 호출하기 전에, 사용중인 NSManagedObjectContext로 등록 된 모든 커밋 된 인스턴스를 확인해야합니다. 당신은 응용 프로그램에서 그 추적 할 수 있습니다, 또는 아마도이 사용 될 것입니다 :

NSManagedObjectContext.insertedObjects

수신기에 삽입하지만 아직 영구 저장소에 저장되지 않은 개체의 집합입니다. (읽기 전용)

1

이 답변은 늦었지만 다른 누군가에게 도움이 되었기를 바랍니다. 예 있습니다. 하위 컨텍스트를 만듭니다. 네가 원하는 모든 것을해라. 변경 사항을 유지하려는 경우 데이터를 유지하지 않는 하위 컨텍스트를 저장하십시오. 상위 컨텍스트에 변경 내용을 알리면 변경 내용이 주 컨텍스트에 있습니다. 그런 다음 주 컨텍스트에서 저장을 수행 할 수 있습니다.변경 사항을 유지하지 할 때

do { 
     try childContext.save() // does not persist anything, just lets know the parent that we are happy with the changes 
    } catch { 
     // handle error 
    } 

당신이 다시 설정할 수 있습니다 : 당신이 원하는

childContext.reset() 

let childContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType) 
    childContext.parentContext = mainContext 
    guard let myClass = NSEntityDescription.insertNewObjectForEntityForName("MyClass", inManagedObjectContext: childContext) as? MyClass else { 
     // something went wrong, handle it here 
     return 
    } 
    // do your thing here 

메인 컨텍스트가 변경 사항을 유지하려는 알려 주 문맥에 변경 사항을 지속시키기 위해 항상 다음과 같이하십시오 :