2016-06-10 8 views
0

Ich entwickle eine Wörterbuch-App, die etwa 10.000 Wörter enthält. Ich verwende Kerndaten, um alle Daten zu speichern, und die Sprache, die ich verwende, ist schnell.Kerndaten mit iOS-App senden

Alles, was ich will ist, diese Daten mit der App zu versenden, so dass, wenn die App aus dem App Store heruntergeladen wird, es alle Daten enthält.

Ich habe bereits nach diesem gesucht und festgestellt, dass es getan werden kann, indem Sie SQLite-Datei in das Projekt einbinden. Aber weiß wirklich nicht, wie man das macht und wo das Simulatorverzeichnis in El Capitan ist.

Ich bin nur ein Anfänger in iOS, so freundlich jemand erklären es mir in sehr einfachen Schritten.

+0

Hallo. Freut mich, Ihnen behilflich zu sein. Wenn die Antwort ihrer normalen Praxis hilft, den Annahmemarker in der relevanten Antwort anzukreuzen. Alles Gute für dein Projekt !! – devim1

Antwort

2

Das könnte eine ziemlich lange Antwort sein. Es wäre am besten, es als Tutorial zu erklären. Der folgende Link zeigt Ihnen was zu tun ist.

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

fand ich den Anfang des Artikels/tutorial und das Ende nützlich für das, was Sie zu tun versuchen.

Ich habe vor kurzem Daten in eine App für ein Quiz geladen, mit einem separaten Xcode-Simulator, um die 3 benötigten SQLite-Dateien zu erstellen. Dieser Artikel zeigt Ihnen, wie man sie, findet, wie man sie "" in Ihrem Xcode Projekt "bündelt", das Sie "vorladen" und Ihnen den Code mitteilen möchten, der innerhalb Ihrer "AppDelegate.swift" Akte addiert wird und woher.

Es gibt 3 Dinge, die Sie Probleme beim Ausfüllen Ihres Projekts vermeiden helfen ...

  1. Sicherstellen, dass die Entity und Attributnamen (in Ihrem Datenmodell (Core Data)) für die Daten, die Sie im Simulator erstellen (separates Projekt), sind identisch mit denen im Projekt, das Sie 'PreLoad' verwenden möchten. [Ansonsten ist die Vorbelastung WONT Arbeit]

  2. Der Code in ‚AppDelegate.swift‘ ist so konzipiert, fügen Sie Ihre App als lenken, wo für die vorinstallierten Daten gehen (das beiliegende Tutorial sehen), aber ich fand Ich musste den Code zwicken, um es zu arbeiten ... (notiert unten)

  3. Nichts wird vom 'AppDelegate gelöscht.swift 'Datei, nur hinzugefügt, und die Namen der 3 SQLite-Dateien hinzugefügt, um es ... z.

In 'AppDelegate.swift' im Core Data Stack ... Sie finden ...

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)! 
    }() 

dieses allein verlassen, aber direcly unterhalb dieses müssen Sie die haben, aber mit drei dif folgendem Code ...

// --------------------------------------------------- 
     // 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) 
       } 
      } 
     } 

die 3 Dateien, die ich im Simulator erstellt hatte, wurden "Q100cdCoreData" genannt andere Erweiterungen ... (a) .sqlite (b) .wal (c) .shm

Aber Sie müssen durch das Tutorial gehen und den Prozess verstehen.

+0

Genau das, was ich wollte. Vielen Dank. –

0
  1. Fügen Sie die sqlite-Datei zum Projekt hinzu.
  2. Sie rufen

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

Bevor:

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

Wo preloadURL wird die URL für Datei in Anwendungspaket sein. Der storeURL ist der Pfad zu Ihrer SQLite-Datei für Core-Daten (normalerweise im Anwendungsverzeichnis).

Also die Datei wird von Bundle in App-Verzeichnis kopiert, wenn es nicht existiert und andernfalls fehlschlagen.

+0

Ich erwähnte, dass ich ein Anfänger bin. Also bitte erläutern, was ich in meiner App bündeln soll und von wo? –

+0

@codename_mak Ich habe die Antwort bearbeitet, um die Schritte zu erklären. – srvv

+0

Ich weiß nicht, wo ist SQLite-Datei. Geben Sie auch Code in swift. –