0

CoreData에 저장되지 않고 메모리에만 저장되는 NSManagedObject의 인스턴스를 만들어야합니다.메모리 전용 NSManagedObject 모델 만들기

예컨대 :

은 내가 ItemLog NSManagedObject를 가지고 있고, 그들 사이의 관계를 가지고있다. 핵심 데이터 속성없이 Log 인스턴스를 만들고 item 속성을 Item 인스턴스에 할당 할 수있게하려고합니다.

다른 메모리 지속성 컨텍스트 (또는 nil 컨텍스트)로 만들 수 있다는 것을 알고 있습니다. 그러나 내 Item 인스턴스가 핵심 데이터 컨텍스트에 있기 때문에 item 속성을 할당 할 수 없습니다.

Illegal attempt to establish a relationship 'item' between objects in different contexts

어떻게 다른 방법이를 얻을 수 있습니다 실행할 때

NSEntityDescription *description = [NSEntityDescription entityForName:@"Log" inManagedObjectContext:defaultContext]; 
Log *log = [[Log alloc] initWithEntity:description insertIntoManagedObjectContext:nil]; 
log.item = item; 

이 코드는 예외를 throw?

답변

1

부모 컨텍스트가 로그의 MOC로 설정된 NSManagedObjectContext를 만들 수 있습니다.

+0

이것은 그렇게 보입니다. 감사! – Indigon

1

역관계가 필요합니까? 그렇지 않은 경우 항목 개체의 ObjectID를 Log 엔터티의 특성으로 사용할 수 있습니다. 당신은 URIRepresentation에 ObjectId가 변환해야, 다음있는 NSString에 그 변환 것 : 항목이 아직 데이터베이스에 저장되지 않은 경우

NSURL *itemURI = [item.objectID URIRepresentation]; 
NSString *itemURIstring = [itemURI absoluteString]; 
log.itemURI = itemURIstring; 

(, 그것은 임시 ID를해야합니다 - 당신은 이것에 대한 테스트해야 item.objectID.isTemporary이면 objectID가 변경 될 수 있습니다). 주어진 Log 객체의 Item 객체를 찾으려면 다음과 같이 처리하십시오.

NSURL *itemURI = [NSURL URLwithString:log.itemURI]; 
NSManagedObjectID *itemObjectID = [self.context.persistentStoreCoordinator managedObjectIDForURIRepresentation:itemURI]; 
Item *item = [self.context objectWithID:itemObjectID]; 

매우 귀찮습니다!

반전이 필요하면 동일한 작업을 수행 할 수 있습니다 (즉, Log 객체의 URI를 Item의 문자열로 저장).