Xcode Swift, экспорт CSV в документы iCloud также сохраняет модель Core Data - PullRequest
0 голосов
/ 20 марта 2019

У меня есть функция, которая анализирует мою модель базовых данных в файл CSV, который затем сохраняется в локальном каталоге пользователей, а затем перемещается в их каталог документов iCloud. По какой-то причине каждый раз, когда я нажимаю сохранить, я одновременно получаю копию модели базовых данных в каталоге. Мой Do / Catch ничего не содержит, ссылаясь непосредственно на мою модель - я просто анализирую свой массив и создаю CSV:

func exportDataToCloud() {
    let error : Error? = nil
    let fileName = "exportedFile.csv"
    var csvText = "COL1,COL2,COL3,COL4,COL5,COL6\n"

    // Define local and iCloud directories
    let localDocumentsURL = FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in: .userDomainMask).last! as NSURL
    let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")

    do {
        if  iCloudDocumentsURL != nil {
            // Create the Directory if it doesn't exist
            if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL!.path, isDirectory: nil)) {
                print("Creating iCloud directory")
                try FileManager.default.createDirectory(at: iCloudDocumentsURL!, withIntermediateDirectories: true, attributes: nil)
            } else {
                print("iCloud directory already exists")
            }
        } else {
            // display alert
            print("iCloud is NOT working!")
        }

        if error != nil {
            print("Error creating iCloud DIR")
        }

        // Add txt file to my local folder
        print("creating local file")
        let myLocalFile = localDocumentsURL.appendingPathComponent(fileName)
        _ = try csvText.write(to: myLocalFile!, atomically: true, encoding: String.Encoding.utf8)

        if ((error) != nil){
            print("Error saving to local DIR")
        }

        // If file exists on iCloud remove it
        print("Does the file already exist in iCloud?")
        var isDir:ObjCBool = false
        if (FileManager.default.fileExists(atPath: iCloudDocumentsURL!.path, isDirectory: &isDir)) {
            print("Deleting the old file")
            try FileManager.default.removeItem(at: iCloudDocumentsURL!)
        }

        // Copy file from my local directory to iCloud
        if error == nil {
            print("Copy new file from my local directory to iCloud directory")

            try FileManager.default.copyItem(at: localDocumentsURL as URL, to: iCloudDocumentsURL!)
        }
    }
    catch {
        print("Error creating a file")
    }
}

... но каждый раз, когда я экспортирую CSV-файл, вместе с ним также помечается модель Core Data.

Если я правильно читаю документы Apple, это может быть связано с отсутствием указания фактического файла, поэтому по умолчанию он копирует все содержимое каталога. Если это действительно так, то как мне указать перемещение только определенного файла? Я записываю исходный файл в мой локальный каталог как fileName, но затем я хочу переместить его в пользовательский каталог iCloud Documents, чтобы он больше не находился в локальном каталоге. Единственное, что мне нужно в локальном каталоге - это хранилище базовых данных.

...