将sqlite db分享到共享扩展到iPhone应用程序

时间:2017-07-22 07:01:34

标签: ios ios8-share-extension

我想将共享扩展程序集成到我的iPhone应用程序中。应用程序包含sqlite数据库,其中包含一些电话簿联系人。我在共享活动视图控制器中也可以看到共享扩展到应用程序和扩展。但问题是我无法访问主应用程序sqlite数据库。当我在扩展中记录数据库路径时,它显示的路径与主应用程序sqlite数据库路径不同。所以,请帮助我了解如何访问主应用程序数据库以从sqlite获取数据,以便我可以将它们显示到共享扩展自定义视图控制器中,并且还希望将新数据插入到数据库中。

2 个答案:

答案 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)

在主应用和共享扩展之间共享UserDefault和Sqlite:

在主要应用中向扩展程序中传输数据的功能中添加“应用程序组”

  • 要分享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