2009-08-23 2 views
2

관리되는 개체 컨텍스트 외부에서 핵심 데이터 관리되는 개체를 사용하고 싶습니다. 이 사이트에서 다른 사용자가이 작업을해서는 안되는 스레드를 보았습니다.하지만 여기에 내 문제가 있습니다.관리 대상 개체 컨텍스트 외부에서 핵심 데이터 개체를 어떻게 사용할 수 있습니까?

'피드'개체와 '스토리'개체가 있습니다. 피드는 RSS 피드와 같으며 스토리는 피드의 단일 스토리와 같습니다. 피드를 북마크에 추가 할 수있는 기능이 있으며 핵심 데이터를 사용하여 피드를 유지하지만 피드에서 스토리를 다운로드 할 때 해당 스토리를 관리 객체 컨텍스트에 삽입하고 싶지 않습니다. 그러나 객체를 만드는 유일한 방법은 다음과 같습니다.

[NSEntityDescription insertNewObjectForEntityForName:name inManagedObjectContext:managedObjectContext]; 

이는 다음 저장 이벤트에서 유지된다는 것을 의미합니다.

사용자가 선택하기 전까지 이러한 개체를 보존하지 않겠습니다.

"TransientStory"와 "PersistentStory"를 둘 다 구현하는 "Story"라는 프로토콜로 정의하려고 시도했지만 악몽입니다. 어떤 아이디어?

답변

1

인 메모리 저장소로 NSManagedObjectContext을 새로 만듭니다. 그런 다음 일시적인 객체를이 컨텍스트에 넣을 수 있으며 지속되지 않습니다.

NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:[NSBundle mainBundle]]]; // though you can create a model on the fly (i.e. in code) 
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc]  initWithManagedObjectModel:mom]; 

NSError *err; 

// add an in-memory store. At least one persistent store is required 
if([psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:&err] == nil) { 
    NSLog(@"%@",err); 
} 

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 
[moc setPersistentStoreCoordinator:psc]; 

계속 유지하려면 나중에 해당 저장소로 이동하거나 컨텍스트를 병합하십시오. 당신은 결국 어쨌든 컨텍스트에 넣어 거라면

또는, (즉, 당신은 단지 그들이 저장하고 때까지이 목록에 표시하지 않으려는) 다음 당신의 NSFetchRequestNOsetIncludesPendingChanges을 설정합니다.

2

이러한 개체를 만들고 단지 문맥에 삽입 할 수 없습니다

NSEntityDescription *entity = [NSEntityDescription entityForName:entityName 
              inManagedObjectContext:managedContext]; 
ManagedObjectClass *volatileObject = [[ManagedObjectClass alloc] initWithEntity:entity 
               insertIntoManagedObjectContext:nil]; 

및 저장하려는 경우, 당신은 단지 상황에 삽입 : (

[managedContext insertObject:volatileObject]; 

당신이 경우 그것을 추가하는 것을 잊어 버리십시오, 컨텍스트에서 저장하려고 할 때 매달려있는 객체 오류가 발생합니다)

관련 문제