2016-09-24 5 views
1

スウィフトバージョンを動作しない私は、ディストリビューションの一部としてそれをパッケージ化することができるようにそれが存在しない場合、私は開始時に自分のアプリケーションに私のrealm.defaultファイルをコピーすることに取り組んでいます。ファイルは変更可能である必要がありますので、ドキュメントディレクトリにコピーしています。スウィフトコピー - 3</p> <p>

は、残念ながら、私は、ファイルが存在しないエラーを取得しています。パスが正しいこと、および.appにファイルがあることを確認しました。それと

は、ファイルは、それ(タイプを入力していない)上のラインと白の円を持っていると私はそれを開こうとすると、私はマックのこの種類にそれを開くことができないと言われ、言われています。パッケージ内容の表示を選択するとその内容が表示され、ファイルはその中に含まれています。次

...上記

テキストは、レルムのファイルをロードする私のアプリの委任からのコードです:

func applicationWillTerminate(_ application: UIApplication) { 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 
} 

func openRealm() { 

    let defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURL! 
    let bundleReamPath = Bundle.main.path(forResource: "default", ofType:"realm") 

    if !FileManager.default.fileExists(atPath: String(describing: defaultRealmPath)) { 
     do 
     { 
      try FileManager.default.copyItem(atPath: bundleReamPath!, toPath: String(describing: defaultRealmPath)) 
     } 
     catch let error as NSError { 
     // Catch fires here, with an NSError being thrown 
     print("error occurred, here are the details:\n \(error)") 
     } 
    } 
} 

次は(コンテキストに太字)エラーメッセージです:

エラードメイン= NSCocoaErrorDomainコード= 4「ファイル 『default.realm:エラーは、ここに詳細がある発生しました』は存在しませんが。」 UserInfo = {NSSourceFilePathErrorKey = /Users/username/Library/Developer/CoreSimulator/Devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/data/Containers/Bundle/Application/B324E72E-2B5A-4A02-BC2C-FB542FDA6957/AppName.app /default.realm、NSUserStringVariant =( コピー )、NSDestinationFilePath = file:///ユーザー/ライブラリ/開発者/ CoreSimulator/Devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/data/Containers/Data/Application /565716DD-E903-409F-B7C8-20154B0DF6BA/Documents/default.realm、NSFilePath = /ユーザ/ユーザ名/ライブラリ/開発/ CoreSimulator /デバイス/ 4965D609-499A-4AE5-8ECC-3266DAE4BA87 /データ/コンテナ/バンドル/アプリケーション/ B324E72E-2B5A-4A02-BC2C-FB542FDA6957/AppName.app/default.realm、NSUnderlyingError = 0x618000241bc0 {エラードメイン= NSPOSIXErrorDomainコード= 2 "No such file or directory"}}

誰もがこれに関するアイデアを持っています。最低でも、パスのすべての方法までユーザ/ユーザ名/ライブラリ/開発/ CoreSimulator /デバイス/ 4965D609-499A-4AE5-8ECC-3266DAE4BA87 /データ/コンテナ/バンドル/アプリケーション/ B324E72E-2B5A-4A02-BC2C-FB542FDA6957へ/AppName.app/が存在し、ファイルがパッケージ内に含まれています。

+0

誰でもこれに何かありますか?残念ながら私はまだまだ立ち往生しています。 – Apocal

答えて

2

あなたはpathURLを混乱しているため。 Realm.Configuration.defaultConfiguration.fileURLは、URLのインスタンスを返します。 Bundle.main.path()Stringのインスタンスを返します。 URLの文字列表現はpathと同じではありません。

print(String(describing: defaultRealmPath)) 
// => file:///Users/.../Documents/default.realm 

print(defaultRealmPath.path) 
// => /Users/.../Documents/default.realm 

したがって、いずれか1つ(パスまたはURL)を使用する必要があります。あなたがpathを使用する場合は、次のように代わりにdefaultRealmPath.pathString(describing: defaultRealmPath)を使用します。

let defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURL! 
let bundleReamPath = Bundle.main.path(forResource: "default", ofType:"realm") 

if !FileManager.default.fileExists(atPath: defaultRealmPath.path) { 
    do 
    { 
     try FileManager.default.copyItem(atPath: bundleReamPath!, toPath: defaultRealmPath.path) 
    } 
    catch let error as NSError { 
     // Catch fires here, with an NSError being thrown 
     print("error occurred, here are the details:\n \(error)") 
    } 
} 

あなたがURLを使用する場合は、Bundle.main.url()代わりBundle main.path(): defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURLてみましょう!

let bundleReamPath = Bundle.main.url(forResource: "default", withExtension:"realm")! 

if !FileManager.default.fileExists(atPath: defaultRealmPath.path) { 
    do 
    { 
     try FileManager.default.copyItem(at: bundleReamPath, to: defaultRealmPath) 
    } 
    catch let error as NSError { 
     // Catch fires here, with an NSError being thrown 
     print("error occurred, here are the details:\n \(error)") 
    } 
} 
+0

ありがとうございます岸川 – Apocal

関連する問題