2014-09-16 9 views
6

Ich bin beschäftigt, eine iOS 8 Today-Erweiterung für meine App zu erstellen. Ich möchte auf meine SQLite-Datenbank (nicht Core Data) von meiner Erweiterung zugreifen. Nach einer kleinen Suche im Internet fand ich heraus, dass ich eine App-Gruppe brauche. Also habe ich eine App-Gruppe für meine App mit dem Namen "group.AppName" erstellt.iOS 8 - SQLite-Datenbank für App-Gruppe erstellen

Mit dem folgenden Code erstellen ich eine SQLite-Datenbank in NSDocumentDirectory. App-Erweiterungen können jedoch nicht auf NSDocumentDirectory zugreifen. Deshalb möchte ich die SQLite-Datenbank in meiner App-Gruppe speichern.

NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docPath = [path objectAtIndex:0]; 

dbPathString = [docPath stringByAppendingPathComponent: @"dbName.db"]; 

char *error; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 

if(![fileManager fileExistsAtPath:dbPathString]) 
{ 
    const char *dbPath = [dbPathString UTF8String]; 

    if(sqlite3_open(dbPath, &treinAppDB) == SQLITE_OK) 
    { 
     const char *sql_stat = "CREATE TABLE IF NOT EXISTS table (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, code TEXT, lat TEXT, lon TEXT)"; 
     sqlite3_exec(appDB, sql_stat, NULL, NULL, &error); 
     sqlite3_close(appDB); 
    } 
} 

ich kann nicht herausfinden, wie ich diese Datenbank in meiner App-Gruppe erstellen kann, so kann ich die Datenbank von meiner Heute Erweiterung zugreifen.

Kann mir jemand bei diesem Problem helfen? Das wäre großartig!

Antwort

14

Sie müssen eine Datenbankdatei in der entsprechenden App auch im App-Gruppenverzeichnis erstellen. So werden die enthaltende App und die App-Erweiterung denselben Dateipfad zu einer Datenbankdatei verwenden.

NSString *appGroupId = @"group.YourAPP.extension"; 

NSURL *appGroupDirectoryPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:appGroupId]; 

NSURL *dataBaseURL = [directory URLByAppendingPathComponent:@"dbName.db"]; 

So durch diese Weise sind die Erstellung Sie die Datenbankdatei in der App enthalten und in der App-Erweiterung sind Sie die Datenbankdatei auf die gleiche Weise erhalten.

+1

Sie gespeichert meinen Tag ...! Danke – MAC

0
func getTheFilePath() -> String 
{ 
    var url = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.com.spanglish.www") as NSURL? 
    var path = url?.absoluteString?.stringByAppendingPathComponent("English.txt") as String? 
    path = path!.stringByReplacingOccurrencesOfString("file:", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) 

    return path! 
} 

Sie können Pfad des Container-App-Pfads, wo Sie sqlite-Datei erstellen können und können sowohl aus Container-App und Erweiterung App zugreifen.
Bitte beachten Sie, dass "Vollzugriff zulassen" muss für den Pfad von dieser Methode sein On

+0

Aber "Vollzugriff zulassen" ist nur für Tastaturerweiterungen, richtig? – rockdaswift