2014-08-31 3 views
0

다양한 관계의 5 가지 코어 데이터 모델이 있습니다. 대부분의 경우이 데이터는 사용자가 장치에서 생성하며 (엔티티에는 jpeg 및 설명 텍스트와 같은 항목이 포함됨) sqlite 영구 저장소에 있습니다.iOS InApp 구매 콘텐츠 통합

그러나 인앱 구매를 제공하고 싶습니다. 각 앱은 다섯 가지 항목 중 세 가지 항목에 대한 데이터로 구성됩니다. 다른 두 엔티티는 기기의 사용자가 만든 핵심 데이터 개체와 전적으로 관련되므로 인앱 구매의 일부가 아닙니다. 한 번의 다운로드에서 데이터 양은 적습니다 (100-300K).

구입 한 콘텐츠를 다운로드 한 후이를 핵심 데이터 저장소에 통합 할 수 있어야합니다. 그래서, 나는 이것을하는 최선의 (또는 적어도 "좋은") 방법을 이해하려고 노력하고 있습니다.

현재 나의 생각은 3 가지 엔티티를 SQLite 테이블로 배포하고이를 핵심 데이터로 가져 오는 것입니다. 그래도 누군가가 더 나은 대안을 제안 할 수 있다면 간과 할 수 있습니다. 나는 여기에서 코드를 찾지 않을 것이다 (잘, 그것은 좋을 것이다. 그러나. ..). 또한 한 장치에서 다른 장치로 이동하기 위해 사용자가 입력 한 데이터를 내 보내야합니다 (Airdrop과 함께하기를 희망하지만 다른 이야기입니다).

벽이없는 경우에도 모든 의견을 보내 주시면 감사하겠습니다.

답변

1

코어 데이터 생성 SQLite 파일을 사용하는 것이 합리적인 해결책입니다. 데이터를 생성하고 읽는 데 사용되는 SQLite pragma는 일관성이 있어야하며 여러 옵션으로 둘 이상의 파일을 만들 수 있다는 점을 알아야합니다 (이 파일이 모두 필요합니다). 기본 pragma 및 WWDC 2013 세션 "코어 데이터 및 iCloud의 새로운 기능"에 대한 자세한 내용은 Technical Q&A 1809을 참조하십시오. 특히, WAL의 기본 저널링 모드는 이동하는 파일에는 권장되지 않습니다 (저널 모드 DELETE, 기존 방식이 바람직 할 수 있음).

간단히 말해, 응용 프로그램에서 생성 된 핵심 데이터 SQLite 파일을 다운로드하고이를 마이그레이션을 수행하여 저장소로 가져옵니다. 독창적 인 마이그레이션 관리자는 중복을 방지하지 않으므로 그렇게하기 위해 고유 한 마이그레이션 프로세스를 구현해야합니다 (원하는 경우 동일한 콘텐츠를 두 번 이상 가져올 수 있기 때문에 가능할 수 있습니다).).

이 과정의 예는 것 ...

  1. 하면 파일 시스템 어딘가에 가져와야 파일을 다운로드합니다.

    [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:configuration URL:downloadedStuffURL options:options error:&error]

나는 또한 옵션의 일환으로 NSReadOnlyPersistentStoreOption을 포함하여 제안하는, 그래서 아무것도 쓰기를 시도합니다 :
  • 다운로드 한 파일에 대한 URL이있는 NSPersistentStoreCoordinator에 새 NSSQLiteStoreType 영구 저장소를 추가
  • 이 파일들에.
    1. 대상으로 기본 응용 프로그램 데이터 저장소의 URL을 사용하여 마이그레이션을 수행

      저장 = [코디네이터 persistentStoreForURL : downloadedStuffURL] sqlStore = [조정자 migratePersistentStore : toURL 저장 : applicationStoreURL 옵션 : 옵션을 사용하여 유형 : NSSQLiteStoreType 오류 : & 오류];

    그리고 거기에 있습니다. 이제 downloadedStuffURL에 위치한 상점의 데이터가 applicationStoreURL에있는 상점으로 가져 오게됩니다. 다운로드 한 StuffURL 저장소가 코디네이터에서 제거되고 가져온 데이터와 함께 applicationStoreURL 저장소가 추가됩니다.

    +0

    이런,이 소리가 너무 단순 해! 나는 가장 기본적인 이주를 넘어서 아무것도하지 않았으므로 분명히 그것에 대해 읽어야 만 할 것입니다. 그러한 사려 깊은 답변을 제공 할 시간을내어 주셔서 감사합니다. – RegularExpression