2012-12-28 7 views
3

현재 모든 Core iOS 장비에서 동일한 데이터를 사용할 수 있도록 전체 Core Data Store를 iCloud에 동기화 중입니다. 이것은 모든 작업을 수행하여 MagicalRecord를 사용하여 설정됩니다MagicalRecord가 포함 된 여러 데이터베이스 또는 iCloud에 데이터베이스의 일부만 동기화

[MagicalRecord setupCoreDataStackWithiCloudContainer:@"xxxxxxx.com.mydomain.MyAppName" localStoreNamed:@"MyAppName"]; 

그러나, 나는 데이터베이스에 어떤 장치를 특정 개체를 저장하고 싶습니다. 기본적으로 웹에서 검색된 정보를 캐싱하는 데 사용되며 사용자 iCloud 계정에서 공간을 차지하지 않기를 바랍니다.

  1. 데이터베이스의 테이블을 동기화해야하는 선택 및 장치 특정 기관에 사용되는 테이블을 무시 :

    나는이 작업을 수행하는 두 가지 방법이있을 것입니다 생각합니다.

  2. MagicalRecord에서 여러 데이터베이스를 관리하고 하나의 데이터베이스에서 동기화해야하는 엔티티와 다른 엔티티에서 특정 엔티티를 저장해야합니다.

이러한 두 가지 방법 중 어느 것이 가능하거나 유지 관리 및/또는 구현이 가장 간단 할 지 모르겠습니다.

가능하다면 어떻게 할 수 있습니까? 코드 예제는 크게 감사하겠습니다. 그래서 내 상점을 모두 수행 할 때 내가 casademora in the answer below에 의해 제안 된 접근 방식을 따르려고 노력하지만,하고


UPDATE는 iCloud에 동기화 beign 끝. 나는 application:didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [MagicalRecord setupCoreDataStackWithiCloudContainer:@"xxxxxxxxx.com.mydomain.MyAppName" localStoreNamed:@"MyAppName_iCloud"]; 
    [[NSPersistentStoreCoordinator coordinatorWithInMemoryStore] addSqliteStoreNamed:@"MyAppName" withOptions:nil]; 

    // Override point for customization after application launch. 
    return YES; 
} 

에 다음을 추가 한 나는 프로젝트에 두 개의 데이터 모델을 추가했습니다. 하나는 이고 MyAppName_iCloud.xcdatamodeld는이고 다른 하나는 MyAppName.xcdatamodeld입니다.

MyAppName 저장소가 iCloud에 동기화되지 않도록하고 싶습니다.

+0

장치 별 데이터는 얼마입니까? 모든 데이터가 아닌 일부 데이터를 동기화하는 것이 가치가있는 것보다 더 어려울 수 있습니다. –

+0

나는 그것을 고려했다. 장치 특정 데이터는 웹 서비스에서 다운로드 한 데이터의 "캐시"를 의미합니다. 기기가 시작되면 웹에서 데이터를로드하는 동안이 정보를 표시하여로드하는 동안 사용자가 앱을 사용할 때 방해받지 않도록하고 싶습니다. 또한이 기능은 오프라인 기능에 사용됩니다. 그것은 많은 정보 일 수 있지만 아마 그렇게 나쁘지는 않습니다. 솔직히 데이터 양에 대한 예측이 없기 때문에 더 이상적인 솔루션을 구현하려고했습니다. 그러나, 나는 그것의 모두를 다만 동기화하는 끝낼지도 모르다. – simonbs

답변

2

MagicalRecord는 CoreData를보다 쉽게 ​​처리 할 수있는 유용한 도우미 메서드의 모음입니다. MagicalRecord는 CoreData의 래퍼 또는 대체품이 아닙니다. CoreData가 할 수있는 것이 무엇이든, MagicalRecord가 할 수 있다는 것을 이해하는 것이 중요합니다. 따라서 CoreData가 여러 영구 저장소를 처리 할 수 ​​있다면 MagicalRecord도 가능합니다. 유일한 트릭은 사용자의 필요에 맞는 적절한 도우미 방법을 찾는 것입니다. 이 경우 해당 메서드는 NSPersistentStoreCoordinator에 있습니다. -addSqliteStoreNamed : 메소드를 살펴보십시오. 이렇게하면 일반 addPersistentStore : 메서드의 추가 매개 변수 없이도 필요한 작업을 수행 할 수 있습니다. (실제로는 커버 아래에 실제로 사용됩니다)

+0

이것이 가능하다는 점을 기쁘게 생각합니다.이 기능을 작동 시키려고했지만 어떤 이유로 든 내 상점 모두 iCloud와 동기화됩니다. 내 접근법에 대해 알아보고 무엇이 잘못되었는지 알겠습니까? 나는 원래의 질문을 내 코드를 보여주기 위해 업데이트했다. – simonbs

+0

이상적으로 카테고리 자체는 코어 데이터 스택의 초기화 과정에서 설정되는 인스턴스 변수를 가지므로 그 이상의 방법입니다. –