簡體   English   中英

應用程序未重新創建iCloud Drive文件夾

[英]App not recreating iCloud Drive folder

我正在構建一個將其文件保存到用戶的iCloud Drive文件夾的應用程序。 在我刪除iCloud Drive中的應用程序文件夾以查看會發生什么之前,一切都運轉良好。 從那時起,每次我打開應用程序時,它都會嘗試將示例文件保存在iCloud中,但是它不起作用(將reloadiCloud()函數設置為在ViewWillAppear中運行)。 創建iCloud Drive文件夾還需要做其他事情嗎? 我的代碼如下。

func reloadiCloud() {
    ubiquityURL = filemgr.url(forUbiquityContainerIdentifier: nil)

    guard ubiquityURL != nil else {
        print("Unable to access iCloud Account")
        return
    }

    ubiquityURL = ubiquityURL?.appendingPathComponent("Documents")

    metaDataQuery = NSMetadataQuery()

    metaDataQuery?.predicate = NSPredicate(format: "NOT %K.pathExtension = ''", NSMetadataItemFSNameKey)
    metaDataQuery?.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.metadataQueryDidFinishGathering), name: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: metaDataQuery!)

    metaDataQuery!.start()
}

func metadataQueryDidFinishGathering(notification: NSNotification) -> Void {
    let query: NSMetadataQuery = notification.object as! NSMetadataQuery

    query.disableUpdates()

    NotificationCenter.default.removeObserver(self, name: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: query)

    query.stop()

    if query.resultCount > 0 {
        fileList = []
        for var i in (0..<query.resultCount) {
            let currentFileURL = query.value(ofAttribute: NSMetadataItemURLKey, forResultAt: i) as! URL
            fileList.append(currentFileURL.lastPathComponent)
            tableView.reloadData()
        }
        tableView.reloadData()
        print(fileList)
    } else {
        let sampleFile = Bundle.main.url(forResource: "Sample", withExtension: "pdf")!
        movetoiCloud(forURL: sampleFile)
    }
}



func movetoiCloud(forURL: URL) {
    let fileName = forURL.lastPathComponent
    ubiquityURL = filemgr.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents/\(fileName)")

    //Check if the filename exists and add "copy" to the new version
    for var i in (0..<fileList.count) {
        if fileList[i] == forURL.lastPathComponent {
            let base = ubiquityURL?.absoluteURL.deletingLastPathComponent()
            let endIndex = fileName.index(fileName.endIndex, offsetBy: -4)

            let truncatedExtension = fileName.substring(from: endIndex)
            let truncatedName = fileName.substring(to: endIndex).appending(" copy").appending(truncatedExtension)

            ubiquityURL = base?.appendingPathComponent(truncatedName)
            print("New ubiquity URL: \(ubiquityURL)")
        }
    }

    do {
        try filemgr.setUbiquitous(true, itemAt: forURL, destinationURL: (ubiquityURL)!)
        reloadiCloud()
        print("Move to iCloud OK")
    } catch let error {
        print("moveToiCloud failed: \(error.localizedDescription)")
    }
}

嘗試更新info plist中的捆綁軟件編號和版本,需要增加這些值才能使icloud添加生效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM