我想将共享扩展程序集成到我的iPhone应用程序中。应用程序包含sqlite数据库,其中包含一些电话簿联系人。我在共享活动视图控制器中也可以看到共享扩展到应用程序和扩展。但问题是我无法访问主应用程序sqlite数据库。当我在扩展中记录数据库路径时,它显示的路径与主应用程序sqlite数据库路径不同。所以,请帮助我了解如何访问主应用程序数据库以从sqlite获取数据,以便我可以将它们显示到共享扩展自定义视图控制器中,并且还希望将新数据插入到数据库中。
答案 0 :(得分:0)
首先,您需要找到数据库路径:
func checkPath()->String {
let dbPath = ""
let filemgr = FileManager.default
let dirPaths =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
.userDomainMask, true)
let docsDir = dirPaths[0]
let databasePath = docsDir.appending("/dbName.sqlite") as NSString
if !filemgr.fileExists(atPath: databasePath as String) {
dbPath = databasePath
}
return dbPath
}
获取路径后,您现在可以访问可共享的db文件:
let ShareableDb = NSData(contentsOfFile: checkPath())
这就是共享db文件所需的全部内容。希望它对你有所帮助。
答案 1 :(得分:0)
在主要应用中向扩展程序中传输数据的功能中添加“应用程序组”
NSUserDefaults
数据:
[NSUserDefaults standardUserDefaults]
替换为[[NSUserDefaults alloc] initWithSuiteName:@"group.com.XXX.XXX"];
如果您在文档目录中复制了sqlite文件。因此,从
更改文档目录路径 try! FileManager.default.url(for:.documentDirectory, in:.userDomainMask,appropriateFor: nil, create:false).appendingPathComponent(fileName)
到
let fileManager = FileManager.default
let directory = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "group.com.xxx.xxx")
return directory!.appendingPathComponent(fileName).path
Target Members
(主要项目和
扩展)所需的类target 'Main_App' do # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! target 'Main_App_extension' do use_frameworks! inherit! :search_paths pod 'FMDB’ pod 'Kingfisher' end end