2011-08-02 7 views
7

내 응용 프로그램에 영구 저장소를 여러 개 만들고 있지만 영구 저장소 조정자와 관리되는 개체 모델을 하나만 사용하고 있습니다. 이제 내 질문은 관리 객체 컨텍스트에서 save 메소드를 호출 할 때, 객체를 저장하는 데 사용할 영구 저장소입니다. 그래서 개체를 저장하는 데 사용되는 영구 저장소를 지정하려고합니다. 데이터베이스에서 개체를 가져 오는 동안과 마찬가지로 저장소에서 개체를 가져올 수 있도록 특정 저장소에서 가져 오기 쿼리를 실행해야합니다. 어떤 도움이 필요합니까?iPhone의 코어 데이터에 기본적으로 사용되는 영구 저장소

답변

4

가져 오기가 문제되지 않아야합니다. NSFetchRequest에서 setAffectedStores : 메소드를 사용하여 특정 상점을 검색하도록 가져 오기 요청을 수정할 수 있습니다.

개체를 만들 때 NSManagedObjectContext에서 assignObject : toPersisentStore : 메서드를 사용하여 특정 저장소에 엔터티를 할당 할 수 있습니다. 귀하의 질문에 관해서는

은 정말 알고 있는데 기본 메커니즘이 아니며, 그것은 당신이 단순히 상점의 모든 영향을받는 매장을 설정할 필요가있을 수 있습니다 :

[request setAffectedStores:[NSArray arrayWithObjects:firstStore,secondStore,thirdStore, nil]];

당신이 모든 적당한 곳을 찾고 있는지 확인하십시오.

+0

안녕하세요, OP와 비슷한 상황에 직면하고 있습니다. 나는 MagicalRecord를 사용하고 있는데, 하나의 객체 모델, 하나의'NSPersistentStoreCoordinator', 하나는'NSManagedObjectContext'이고, 기본값은 하나이고 두 개의 SQLite'NSPersistentStore'입니다. 그 중 하나는 영구 저장소로 사용되며 다른 하나는 임시 저장소로 사용됩니다. 앱 내에서이 임시 저장소를 채 웁니다. 하지만 결과는 0 점입니다. MagicalRecord의 [Github] (https://github.com/magicalpanda/MagicalRecord/issues/976#issuecomment-77516462)에 문제를 게시했습니다. 좀 봐 주시겠습니까? – Isuru

0

각 저장소마다 실제로 PSC를 사용하고 싶습니다. 이렇게하면 설명하는 문제가 사라지고 한 PSC 만 갖고 싶은 이유를 알 수 없습니다.

+1

나는 그것이 하나의 PSC 가능해야한다고 생각합니다. 그렇지 않으면 PSC에 여러 상점을 추가하는 조항이 없을 수 있습니다. –

+0

PersistentStoreCoordinator의 목적이 여러 영구 저장소를 조정하는 것이라고 생각했습니다. 다른 Managed Object Models가없는 한. – daver

5

구성을 사용할 수 있습니다.

[PersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:nil error:] 

당신이 처음 SQLite는 저장하고 두 번째는 메모리 저장 될 것입니다 될 것입니다 예를 들어 하나의 관리 개체 컨텍스트, 단일 관리 개체 모델, 하나의 영구 저장소 코디네이터 만이 개 지속적인 매장을 가지고하고 싶은 말은.

이 설정에서는 SQLite 저장소의 경우 "SQLiteStore"를, 메모리 저장소의 경우 "InMemoryStore"의 두 가지 구성을 만듭니다. (당신의 .xcdatamodel 파일을 엽니 다) 엑스 코드 :

.xcdatamodel file in XCode

당신은 당신의 관리 개체 모델의 사용 가능한 구성 목록을 참조하십시오. 관리 객체 모델 구성은 기본적으로 문자열 이름과 연관된 엔티티 설명 세트입니다. 구성을 추가하려면 .xcdatamodel 파일을 연 상태에서 편집기 -> 구성 추가 을 사용하고 원하는 문자열 이름을 입력하십시오. 첫 번째 SQLite 저장소에 저장하려는 엔티티를 "SQLiteStore"구성으로 드래그하고 다른 항목은 "InMemoryStore"구성으로 끌어 놓습니다.

이제 자, 코드를 업데이트 할 차례입니다. 영구 저장소 코디네이터를 만들고 영구 저장소를 추가하는 범위로 이동합니다. 유일한 변화는 그들에 대한 구성을 지정하는 것입니다 : 지금의

... 
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:yourManagedObjectModel]; 
NSURL storeURL = … // your store url 
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"SQLiteStore" URL:storeURL options:nil error:&error]) 
{ 
    NSLog(@"[Core Data error] Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
}  

if (![__persistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:@"InMemoryStore" URL:nil options:nil error:&error]) 
{ 
    NSLog(@"[Core Data error] Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 
... 

, 당신은 "InMemoryStore"구성으로 드래그 한 모든 개체가 자동으로 메모리 영구 저장소에 저장됩니다와 동일 "SQLiteStore"에 간다. 어쩌면 그 후에 장치/시뮬레이터에 앱을 다시 설치해야 할 것입니다.

그리고 빠른 이력서 :

  1. 관리 개체 모델 편집기에서 구성을 (만듭니다.xcdatamodel 파일);
  2. 코드에서 몇 가지 영구 저장소를 영구 저장소 조정자에 추가하여 적절한 구성 이름을 제공하십시오.

확인 대한 추가 정보를 원하시면 링크 : http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-SW4