2016-06-10 2 views
0

약 10,000 단어가 포함 된 사전 앱을 개발 중입니다. 핵심 데이터를 사용하여 모든 데이터를 저장하고 있으며 사용중인 언어는 신속합니다.iOS 앱으로 코어 데이터 전달

내가 원하는 것은이 데이터를 앱과 함께 제공하여 앱 스토어에서 앱을 다운로드 할 때 모든 데이터가 포함되도록하는 것입니다.

나는 이것에 대해 이미 조사한 결과 프로젝트에 SQLite 파일을 포함 시켜서 수행 할 수 있음을 발견했다. 하지만 실제로 어떻게 해야할지 모르고 엘 캐피 탄의 시뮬레이터 디렉토리는 어디에 있습니까.

저는 iOS에서의 초보자입니다. 친절하게도 누군가 매우 간단한 단계로 설명해줍니다.

+0

안녕하세요. 도와 줘서 기뻐. 대답이 해당 답변에서 수락 표시를 체크하는 데 도움이되는 경우 당신의 프로젝트에 최고! – devim1

답변

2

이것은 상당히 오랜 대답 일 수 있습니다. 튜토리얼으로 설명하는 것이 가장 좋습니다. 다음 링크는 수행 할 작업을 보여줍니다.

http://www.appcoda.com/core-data-preload-sqlite-database/

나는 기사/튜토리얼의 시작과 당신이 뭘 하려는지에 대한 유용한 끝을 발견했다.

저는 최근에 별도의 Xcode 시뮬레이터를 사용하여 필요한 3 가지 SQLite 파일을 작성하여 퀴즈 용 앱에 데이터를 미리로드했습니다. 이 기사에서는, 을 '미리로드'할 Xcode 프로젝트에을 "묶어"어떻게 'AppDelegate.swift'파일에 추가 할 것인지 알려줄 것입니다. 어디에.

에 대한 프로젝트를 완료에 문제를를 방지하는 데 도움이됩니다 3 가지 ...

  1. 실체를 확인하고 (당신의 데이터 모델 (코어 데이터)에) 이름을 속성이 있습니다 Simulator (별도의 프로젝트)에서 생성하는 데이터는 'PreLoad'하려는 프로젝트의 데이터와 동일합니다. [그렇지 않으면 미리로드 실 거예요 작업]

  2. 'AppDelegate.swift'에 추가하는 코드 (첨부 된 튜토리얼 참조) 사전로드 된 데이터를 얻을 수있는 곳으로 귀하의 응용 프로그램을 직접 설계, 그러나, 나는 발견 나는 그것을 작동시키기 위해 코드를 tweek 할 필요가 있었다 ... (아래 명시)

  3. 'AppDelegate'에서 아무것도 삭제되지 않았다.swift '파일을 추가하고 단지 3 개의 SQLite 파일을 추가했습니다. 예 : 코어 데이터에서 'AppDelegate.swift'당신은 발견 할 것이다 ... 스택에서

...

lazy var managedObjectModel: NSManagedObjectModel = { 
     // The managed object model for the application. This property is not optional. It is a fatal error for the application not to be able to find and load its model. 
     let modelURL = NSBundle.mainBundle().URLForResource("EoMQ", withExtension: "momd")! 
     return NSManagedObjectModel(contentsOfURL: modelURL)! 
    }() 

이 혼자두고 있지만 direcly이 아래에 당신이이 필요합니다 다음 코드 ...

// --------------------------------------------------- 
     // Create the coordinator and store 
     let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) 
     let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("Q100cdCoreData.sqlite") // originally = "SingleViewCoreData.sqlite" - then changed to new name... from imported sqlite files 
     // --------------------------------------------------- 
     // ** Load the Already made DB from Simulator ** 
     if !NSFileManager.defaultManager().fileExistsAtPath(url.path!) { 

      let sourceSqliteURLs = [NSBundle.mainBundle().URLForResource("Q100cdCoreData", withExtension: "sqlite")!, NSBundle.mainBundle().URLForResource("Q100cdCoreData", withExtension: "sqlite-wal")!, NSBundle.mainBundle().URLForResource("Q100cdCoreData", withExtension: "sqlite-shm")!] 

      let destSqliteURLs = [self.applicationDocumentsDirectory.URLByAppendingPathComponent("Q100cdCoreData.sqlite"), self.applicationDocumentsDirectory.URLByAppendingPathComponent("Q100cdCoreData.sqlite-wal"), self.applicationDocumentsDirectory.URLByAppendingPathComponent("Q100cdCoreData.sqlite-shm")] 

      for index in 0 ..< sourceSqliteURLs.count { 
       do { 
        try NSFileManager.defaultManager().copyItemAtURL(sourceSqliteURLs[index], toURL: destSqliteURLs[index]) 
       } catch { 
        print(error) 
       } 
      } 
     } 

내가 시뮬레이터에서 생성했던 3 개 개의 파일하지만 세 DIF와 "Q100cdCoreData"라고했다 ferent extensions ... (a) .sqlite (b) .wal (c) .shm

하지만 자습서를 읽고 과정을 이해해야합니다.

+0

정확히 내가 원했던 것. 고맙습니다. –

0
  1. 프로젝트에 sqlite 파일을 추가하십시오.
  2. 당신은 호출

    [[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&error] 
    

전 : preloadURL 응용 프로그램 번들 파일에 대한 URL 될 것

[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                 configuration:nil 
                   URL:storeURL 
                  options:nil 
                   error:&error] 

. storeURL은 핵심 데이터 (일반적으로 응용 프로그램 디렉토리에 있음)에 대한 sqlite 파일의 경로입니다.

파일이 없으면 파일이 번들에서 app 디렉토리로 복사되고 그렇지 않으면 실패합니다.

+0

나는 초보자라고 언급했다. 제 앱과 어디에서 무엇을 묶어야합니까? –

+0

@codename_mak 단계를 설명하는 답을 편집했습니다. – srvv

+0

나는 sqlite 파일이 어디에 있는지 모른다. 또한 신속하게 코드를 친절하게 제공하십시오. –