8

アプリ用の iOS 8 Today 拡張機能の作成に忙しくしています。拡張機能から SQLite (Core Data ではない) データベースにアクセスしたいと考えています。Web で少し検索した後、アプリ グループが必要であることがわかりました。そこで、「group.AppName」という名前のアプリのアプリ グループを作成しました。

次のコードで、NSDocumentDirectory に SQLite データベースを作成します。ただし、App Extensions は NSDocumentDirectory にアクセスできません。そのため、SQLite データベースを自分のアプリ グループに保存したいと考えています。

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

アプリ グループでこのデータベースを作成する方法がわからないので、Today 拡張機能からデータベースにアクセスできます。

誰でもこの問題で私を助けることができますか? それは素晴らしいことです!

4

2 に答える 2

16

You have to create a database file in the containing app in the app group directory too. So the containing app and the app extension will use the same file path to a database file.

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

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

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

So by this way, you're creating the database file in the containing app and in the app extension you're getting the database file by the same way.

于 2014-09-17T14:20:22.597 に答える
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!
}

sqliteファイルを作成できるコンテナアプリパスのパスを取得でき、コンテナアプリと拡張アプリの両方からもアクセスできます。
このメソッドからパスを取得するには、「フル アクセスを許可」をオンにする必要があることに注意してください。

于 2015-05-11T14:02:08.500 に答える