2017-07-22 14 views
0

私のiPhoneアプリに共有拡張機能を統合したい。アプリケーションには電話帳の連絡先の一部を含むsqliteデータベースが含まれています。共有エクステンションをappに追加し、エクステンションを共有アクティビティビューコントローラにも表示します。しかし、問題は、私はメインアプリのsqliteデータベースにアクセスできないということです。拡張でデータベースパスを記録すると、メインアプリケーションのsqliteデータベースパスとは異なるパスが表示されます。ですから、メインアプリケーションデータベースにアクセスしてsqliteからデータをフェッチする方法について教えてください。共有拡張カスタムビューコントローラにそれらを表示し、新しいデータをデータベースに挿入することもできます。sqlite dbを共有してiPhoneアプリに共有する

+0

HII @VyasのKishan、私は..あなたは、このための任意のソリューションを持って、同じ問題に直面していますか? – Rivendell

+1

@ V12、これに代わるソリューションが見つかりました。これにはApp Groupsを使用します。ユーザーが共有拡張を開いたときと、ユーザーがメインアプリケーションを開いてアプリケーショングループから情報を取得してsqlite dbに保存すると、すべての情報が保存されます。これが唯一の解決策です。 –

+0

解決策を得た:私はあなたに私が従ったステップをお送りします。 – Rivendell

答えて

0

あなたは、データベースのパスを見つける必要があるまず:あなたは、DBファイルを共有するために必要なすべての

let ShareableDb = NSData(contentsOfFile: checkPath()) 

ザッツ:パスを取得した後

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ファイルにアクセスすることができます。それがあなたに役立つことを願っています。主なアプリケーションと共有拡張の間

+0

私は、アプリケーショングループとメインアプリケーションのための異なるパスを取得します。 - メインアプリケーションからのDbパス /ユーザー/ dnk /ライブラリ/開発者/ CoreSimulator/Devices/3AEA77CB-EDC4-4484-9FA4-BAA92B98D277/data/Containers/Data/Application/9B9A59C1-74A4-4BF8-9E99-40A4660E0ED4 /Documents/DB.sqlite - アプリケーショングループからのDbパス /Users/dnk/Library/Developer/CoreSimulator/Devices/3AEA77CB-EDC4-4484-9FA4-BAA92B98D277/data/PluginKitPlugin/202A137C-D65B -4ECD-9BE2-5FC15135ABA4/Documents/DB.sqlite –

0

共有UserDefault SQLiteの:

NSUserDefaultsデータを共有するために拡張

  • 「アプリケーショングループ」のメインアプリでのデータ転送のための機能でを追加します。 [NSUserDefaults standardUserDefaults]ドキュメントディレクトリにsqliteファイルをコピーした場合は、[[NSUserDefaults alloc] initWithSuiteName:@"group.com.XXX.XXX"];
  • と置き換えてください。だから、へ

    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 
関連する問題