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

时间:2015-07-25 04:27:44

标签: ios iphone swift cloudkit

我希望有人可以用可能被视为愚蠢问题的新手来帮忙。我正在为一个社区组织制作一个博客类型的应用程序,它非常基础。它将包含每个选项卡可能每周更新的选项卡,包含过去更新的表视图和包含常规信息的选项卡。

我设置了cloudkit来存储字符串和图片,然后创建了一个fetchData方法来查询云工具包。就代码而言(下面的示例),它可以工作并获取数据/图片。我的问题是,当我运行应用程序时,文本和图像更新需要大约5-10秒。我想知道这是否正常,我应该只添加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记录无法识别换行符。如果你能回答我的问题,我会非常感激。

1 个答案:

答案 0 :(得分:1)

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

例如,假设您使用CKModifyRecordsOperation保存数据,并为modifyRecordsCompletionBlock属性分配了一段代码。只要该块运行并且没有传入任何错误,您就可以将数据和图像呈现给用户。您在本地拥有数据(字符串,图像等),因为您只是将它们发送到服务器,因此无需再次请求它们。

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

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

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

  

使用字符串存储相对少量的文本。虽然   字符串本身可以是任何长度,您应该使用资产来存储   大量的文字。

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