iOS 8 – 为App Group创建SQLite数据库

我正忙着为我的应用创建iOS 8 Today扩展程序.我想从我的扩展程序访问我的sqlite(而不是核心数据)数据库.在网上搜索一下后,我发现我需要一个应用程序组.所以我为我的应用程序创建了一个名为“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,&error);
        sqlite3_close(appDB);
    }
}

我无法弄清楚如何在我的应用程序组中创建此数据库,因此我可以从我的今日扩展程序访问该数据库.

任何人都可以帮我解决这个问题吗?那太好了!

解决方法

您还必须在应用程序组目录中的包含应用程序中创建数据库文件.
因此,包含应用程序和应用程序扩展将使用与数据库文件相同的文件路径.
NSString *appGroupId = @"group.YourAPP.extension";

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

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

因此,通过这种方式,您将在包含应用程序和应用程序扩展中创建数据库文件,您将以相同的方式获取数据库文件.

相关文章

背景 前端时间产品经理决定使用百度统计,使得 工程B 中原统计sdk-友盟统计,需要被去除。之前尝试去除...
结论: alloc负责分配内存和创建对象对应的isa指针; init只是返回alloc生成的对象。 所以alloc后,多次...
更新 如果UI愿意把启动图切割成n份,按一定约束在launchscreen.storyboard中进行排版,启动图效果会更好...
最近在看一本书《Effective OC 2.0》,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环。...
// // ViewController.m // paintCodeTestOC //gif // Created by LongMa on 2019/7/25. // #import &a...
背景介绍 一般情况下,出于省电、权限、合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但...