Cloudkit 获取数据(字符串和图像资产)调用后需要很长时间才能出现

Cloudkit fetch data (strings and image asset) take a long time to appear after call

我希望有人可以帮助编码新手解决一个可能被认为是愚蠢的问题。我正在为一个社区组织制作一个博客类型的应用程序,它非常基础。它会有标签,其中每个标签可能每周更新一次,一个 table 视图显示过去的更新,一个标签显示一般信息。

我设置了cloudkit来存储字符串和图片,然后创建了一个fetchData方法来查询云工具包。就代码(下面的示例)而言,它可以工作并获得 data/picture。我的问题是,当我 运行 应用程序时,文本和图像更新需要将近 5-10 秒。我想知道这是否正常,我应该只添加一个 activity 覆盖 10 秒,或者有什么方法可以减少更新所需的时间。

override func viewDidLoad() {
    fetchUpcoming()
}

func fetchUpcoming() {
    let container = CKContainer.defaultContainer()
    let publicData = container.publicCloudDatabase

    let query = CKQuery(recordType: "Upcoming", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
    publicData.performQuery(query, inZoneWithID: nil) { results, error in
        if error == nil { // There is no error

            println(results)
            for entry in results {
                self.articleTitle.text = entry["Title"] as? String
                self.articleBody.text = entry["Description"] as? String
                let imageAsset: CKAsset = entry["CoverPhoto"] as! CKAsset
                self.articlePicture.image = UIImage(contentsOfFile: imageAsset.fileURL.path!)
                self.articleBody.sizeToFit()
                self.articleBody.textAlignment = NSTextAlignment.Justified
                self.articleTitle.adjustsFontSizeToFitWidth = true    

            }
        }
        else {
            println(error)
        }
    }

}

我的另一个问题是关于存储在云工具包上的字符串内容。如果我想在一个血液条目中添加多个段落(例如),有没有办法将它放在一条记录中,或者我是否必须将博客条目内容分成单独的段落?我可能弄错了,但似乎 CloudKit 记录不识别换行符。如果您能帮助回答我的问题,我将不胜感激。

看起来您可能会在创建数据后发出查询,这不是必需的。当您保存数据时,一旦您的完成块成功(没有错误),您就可以确保数据存储在服务器上,您可以继续将其呈现给用户。

例如,假设您正在使用 CKModifyRecordsOperation to save the data and you assign a block of code to the modifyRecordsCompletionBlock 属性。一旦该块运行并且没有错误传入,您就可以将数据和图像呈现给用户。您在本地拥有数据(字符串、图像等),因为您刚刚将它们发送到服务器,因此无需再次请求它们。

这为用户提供了更快的体验,并减少了您在他们的设备上使用的网络请求量和电池电量。

如果您只是在应用程序启动时发出正常查询,那么这段时间看起来确实很长,但可能有很多因素:您的本地网络、您正在下载的图像的大小等.所以没有更多信息很难说。

关于文本段落的存储,你应该考虑使用CKAsset。这是 CKRecord 文档中关于字符串数据的引述:

Use strings to store relatively small amounts of text. Although strings themselves can be any length, you should use an asset to store large amounts of text.

您需要确保在用户输入和发送至 CloudKit 的内容之间正确存储和呈现换行符。