ios - 快速重新安装应用程序后 iCloud 文件不可见

标签 ios swift icloud

我将文件存储在 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

最佳答案

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

问题的要点是 iCloud 不会自动将云文件同步到新设备。您的代码必须这样做。因此,如果您从设备(但不是从 iCloud)中删除一个应用程序并重新安装同一个应用程序,该应用程序将看不到以前的 iCloud 文件。您可以添加新的并使用上面的代码查看它们,但您实际上只是看到本地无处不在的容器副本。要查看以前的项目,您需要在 iCloud 上执行元数据查询,从元数据查询结果中解析感兴趣文件的文件名,然后运行 每个文件上的 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

关于ios - 快速重新安装应用程序后 iCloud 文件不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065908/

相关文章:

ios - UISwipeGestureRecognizer 动画

ios - 使用 TableView 中组的第一个字母自定义索引部分

ios - UIDocument loadFromContents : is not always called after document was changed on another device

ios - iOS 中的应用组和 iCloud

ios - 如何在继续上传操作时延长 iOS 应用程序的后台执行时间?

ios - 何时使用 AKNodeRecorder 和 AKClipRecorder

swift - 如何通过函数/方法调用 SwiftUI 模式表?

ios - 导入的 blender 模型旋转不正确

ios - 单元格动画结束后更改单元格 subview 高度 Swift

ios - iOS5 中 icloud 的核心数据