Salinan Cepat File Realm - Tidak Berfungsi

Versi cepat 3.

Saya sedang menyalin file realm.default saya ke dalam aplikasi saya saat memulai jika tidak ada sehingga saya dapat mengemasnya sebagai bagian dari distribusi. File tersebut harus bisa diubah jadi saya menyalinnya ke direktori dokumen.

Sayangnya saya mendapatkan pesan kesalahan bahwa file tersebut tidak ada. Saya telah memverifikasi bahwa jalurnya benar, dan .app memiliki file di dalamnya.

Karena itu, file tersebut memiliki lingkaran putih dengan garis di atasnya (jangan masukkan jenisnya) dan mengatakan bahwa saya tidak dapat membukanya di Mac jenis ini ketika saya mencoba membukanya. Saya dapat melihat isinya dengan memilih tampilkan isi paket dan file tersebut ada di dalamnya.

Teks Di Atas..

Berikut ini adalah kode dari Delegasi Aplikasi saya yang memuat file realm:

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)")
        }
    }
}

Berikut ini adalah pesan kesalahan (dicetak tebal untuk konteksnya):

terjadi error, berikut detailnya: Error Domain=NSCocoaErrorDomain Code=4 "File “default.realm” tidak ada." UserInfo={NSSourceFilePathErrorKey=/Pengguna/nama pengguna/Perpustakaan/Pengembang/CoreSimulator/Devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/data/Containers/Bundle/Application/B324E72E-2B5A-4A02-BC2C-FB542FDA69 57/Nama Aplikasi .app/default.realm, NSUserStringVariant=( Salin ), NSDestinationFilePath=file:///Users/username/Library/Developer/CoreSimulator/Devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/data/Containers/ DATA/APLIKASI/565716DD-E903-409F-B7C8-20154B0DF6BA/DOCUMENT/DEFAULT.REALM, NSFILEPATH =/Pengguna/Nama Pengguna/Perpustakaan/Pengembang/Coresimulator/Perangkat/4965D609-49999999A-4AE5-4AE5-46666666666666 /Application/B324E72E-2B5A-4A02-BC2C-FB542FDA6957/AppName.app/default.realm, NSUnderlyingError=0x618000241bc0 {Error Domain=NSPOSIXErrorDomain Code=2 "Tidak ada file atau direktori seperti itu"}}

Ada yang punya ide tentang ini. Minimal, jalur hingga Users/username/Library/Developer/CoreSimulator/Devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/data/Containers/Bundle/Application/B324E72E-2B5A-4A02-BC2C-FB542FDA6957 /AppName.app/ ada dan kemudian file tersebut terkandung dalam paket.


person Apocal    schedule 24.09.2016    source sumber
comment
Adakah yang tahu tentang ini? Sayangnya saya masih terjebak.   -  person Apocal    schedule 26.09.2016


Jawaban (1)


Karena Anda membingungkan path dan URL. Realm.Configuration.defaultConfiguration.fileURL mengembalikan contoh URL. Bundle.main.path() mengembalikan contoh String. Representasi String dari URL tidak sama dengan path.

e.g.

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

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

Jadi, Anda harus menggunakan salah satunya (jalur atau URL). Jika Anda menggunakan path, gunakan defaultRealmPath.path sebagai ganti String(describing: defaultRealmPath) seperti berikut:

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)")
    }
}

Jika Anda menggunakan URL, Bundle.main.url() sebagai gantinya Bundle main.path(): biarkan 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)")
    }
}
person kishikawa katsumi    schedule 28.09.2016
comment
Terima kasih banyak Kishikawa - person Apocal; 29.09.2016