2011-07-17 2 views
0

현재 CoreData를 사용하여 일부 객체를 영구 저장하는 iPhone 응용 프로그램에서 작업 중입니다.CoreData를 사용하여 동일한 유형의 영구 및 비 영구 객체 사용

내가 어떤 데이터를 가지고 내가 인터넷에서 조회 :

내가 당신에게 시나리오에 대한 간단한 소개를주고 싶다 분명 내 지점을 확인하십시오. 이 데이터를 MyData라는 개체에 저장하고 필요한 곳에 사용합니다. 데이터가 사용될 때 영구적으로 저장하려고하므로 MyManagedData 개체에 저장합니다.

데이터 저장을위한이 솔루션이 정말 마음에 들지 않습니다. 정확히 동일한 데이터를 저장하는 두 개의 클래스가 있기 때문에 하나는 CoreData에서 관리합니다.

자동으로 CoreData에 저장하지 않고 관리 객체를 인스턴스화하는 방법이 있습니까? 그래서 그냥 MyManagedData 개체를 가질 수 있으며 그 중 단지 무리 만 저장할 수 있습니까? 그런 것들을 어떻게 구성합니까?

인사말

답변

2

하나의 가능한 접근법은 두 개의 관리되는 개체 컨텍스트를 갖는 것입니다. 메인 저장 데이터에 대한 컨텍스트를 이미 사용하고 있으므로 저장하지 않는 '스크래치'데이터에 대한 새 컨텍스트를 만들 수 있습니다.

주제에 관한 몇 가지 기사가 있습니다 (예 : http://www.timisted.net/blog/archive/multiple-managed-object-contexts-with-core-data/).

저는 CoreData를 돕기 위해 InnerBand을 사용했습니다. 그것은 내 코드를 상당히 단순화하고 방해하지 않습니다.

방금 ​​다음을 수행하는 경우이어야한다 (저장되지 않음) 과도 엔티티를 저장하기 위해 임시 컨텍스트/저장소를 생성, InnerBand를 사용하는 경우

: 분명히

// note - not calling [CoreDataStore mainStore] here -- 
// we use that for persisted main data 
self.temporaryStore = [CoreDataStore createStore]; 

// and then create temporary entities like so: 
MyEntityClass *myEntity = [MyEntity createInStore:self.temporaryStore]; 

을, 당신은 그것으로, [self.temporaryStore save] 전화를해서는 안됩니다 일시적인 데이터 전용입니다.

참고 : 나는 위의 전략을 아직 시도하지 않았지만 실행 가능하다고 생각합니다.

N.B. 관련된 이슈에서 엔티티 클래스를 생성하는 데 어려움을 겪고 엔티티 클래스를 다시 생성 할 때 엔티티 클래스에 추가했을 수있는 사용자 정의 코드가 파괴되는 것을 방지하기 위해 mogenerator도 사용하고 있습니다.

0

가장 간단한 솔루션은 컨텍스트를 저장하기 전에 더 이상 원하지 관리 개체를 삭제합니다. 그렇게하면 컨텍스트는 보존하려는 객체 만 영구 저장소에 씁니다.

그러나 나는 신경 쓰지 않을 것입니다. 객체가 더 이상 필요하지 않을 때 객체를 삭제하고 특정 시간에 디스크에 기록되었는지 여부에 대해 걱정하지 않기 위해 컨텍스트에 알려줍니다. 데이터가 너무 작아서 한번에 메모리에 보관할 수 있다면 디스크에 객체를 쓰는 오버 헤드로 인해 나중에 삭제할 수 있습니다.

+0

Thx. 그러나 저장하지 않을 경우 대담한 보일러 플레이트 코드가 포함되어있는 모든 객체에 대해 NSMangedObject를 사용하면 처리 할 필요가 없습니다. – Kie

+0

두 개의 서로 다른 개체 집합을 추적하는 오버 헤드와 비교할 때 일부 개체는 저장되었지만 일부 개체는 저장되지 않습니다. 귀하의 이름과 핵심 데이터 사용에 대한 귀하의 설명을 토대로 귀하가 올바르게 사용하고 있다고 생각하지 않습니다. 나는 시간과 노력을 절약하기 위해 잘못된 시도로 시간과 노력을 낭비하고 있다고 생각합니다. – TechZen

+0

그게 좋은 지적 일 수 있습니다. 내 시스템에서 매개 변수 또는 반환 값으로 객체에서 객체로 전달하는 객체의 일부 클래스가 있습니다.나는이 객체를 사용하여 객체를 생성하고 어떤 경우에는 배포해야하며, 다른 객체에서는이 객체 또는 객체가 필요한 객체를 필요로합니다. 이 오브젝트 데이터를 저장할 컨테이너가 가장 좋은 방법 일 수 있습니까? 또는 이것은 잘못된 사용입니까? 나 자신에게 SQLite 래퍼를 직접 작성한다면 나에게 그러한 객체의 일부 데이터베이스 항목의 데이터를 제공하는 로더 클래스를 구현할 것이다. – Kie