【问题标题】:iCloud files not visible after app reinstall swift应用程序重新安装swift后iCloud文件不可见
【发布时间】:2016-10-16 01:23:53
【问题描述】:

我将文件存储在 iCloud 中作为备份的一种方式。上传和下载文件似乎工作正常,但如果我删除设备上的应用程序并在同一设备上重新安装应用程序,我不再看到上传到 iCloud 的文件(即使是在删除应用程序之前从该设备上) )。 ubiquityIdentityToken 在所有安装中都是相同的。我不想在设备之间同步,只是存储和检索。我可以在 \settings\icloud\manage storage\ 中看到文件,但不能通过运行以下代码:

func createListOfSQLBaseFilesIniCloudDocumentsDirectory() -> [String]{

    let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")

    var iCloudBackupSQLFiles = [String]()

    do{
        let directoryContents = try FileManager.default.contentsOfDirectory(at: iCloudDocumentsURL!, includingPropertiesForKeys: nil, options: [])

        for myFile in directoryContents {
            if myFile.pathExtension == "sqlite" {

                let fileWithExtension = myFile.lastPathComponent
                //backupSQLFiles is an array of full file names - including the extension
                iCloudBackupSQLFiles.append(fileWithExtension)

            }//if myFile
        }//for in

    } catch let error as NSError {
        print("Unresolved error \(error), \(error.userInfo)")
    }//do catch

    return iCloudBackupSQLFiles

}//createListOfSQLBaseFilesIniCloudDocumentsDirectory

任何指导将不胜感激。 Swift 3、iOS 10、Xcode 8

【问题讨论】:

    标签: ios swift icloud


    【解决方案1】:

    很难相信没有其他人遇到过这个问题。同样,这是为了简单的文件存储和检索,而不是在设备之间动态同步。

    问题的要点是 iCloud 不会自动将云文件同步到新设备。您的代码必须这样做。因此,如果您从设备(但不是从 iCloud)中删除应用程序并重新安装相同的应用程序,该应用程序将看不到以前的 iCloud 文件。您可以添加新的并使用上面的代码查看它们,但您实际上只是看到本地无处不在的容器副本。要查看以前的项目,您需要在 iCloud 上执行 metadataQuery,从 metadataQuery 结果中解析感兴趣的文件的文件名,然后运行 startDownloadingUbiquitousItem(at:) 在每个文件上。例如,根据 metadataQuery 结果在 iCloud 中创建一个文件数组,并将这个 do-catch 放入 for-in 循环中。

    let fileManager = FileManager.default
    let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents", isDirectory: true)   
    let iCloudDocumentToCheckURL = iCloudDocumentsURL?.appendingPathComponent(whateverFileName, isDirectory: false)
    
    do {
        try fileManager.startDownloadingUbiquitousItem(at: iCloudDocumentToCheckURL!)
        print("tested file: \(whateverFileName)")
    
    } catch let error as NSError {
        print("Unresolved error \(error), \(error.userInfo)")
    }//do catch
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2015-03-21
      • 1970-01-01
      相关资源
      最近更新 更多