我希望有人可以用可能被视为愚蠢问题的新手来帮忙。我正在为一个社区组织制作一个博客类型的应用程序,它非常基础。它将包含每个选项卡可能每周更新的选项卡,包含过去更新的表视图和包含常规信息的选项卡。
我设置了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记录无法识别换行符。如果你能回答我的问题,我会非常感激。
答案 0 :(得分:1)
看起来您可能在创建数据后发出查询,这是不必要的。当您保存数据时,只要您的完成块成功(没有错误),您就可以确保数据存储在服务器上,您可以继续将其呈现给用户。
例如,假设您使用CKModifyRecordsOperation保存数据,并为modifyRecordsCompletionBlock属性分配了一段代码。只要该块运行并且没有传入任何错误,您就可以将数据和图像呈现给用户。您在本地拥有数据(字符串,图像等),因为您只是将它们发送到服务器,因此无需再次请求它们。
这为用户提供了更快捷的体验,并减少了您在设备上使用的网络请求和电池数量。
如果您只是在应用程序启动时发出正常查询,那么这段时间似乎很长,但可能有很多因素:您的本地网络,您正在下载的图像的大小等等。没有更多信息就很难说。
关于文本段落的存储,您应该考虑使用CKAsset。以下是CKRecord关于字符串数据的文档的引用:
使用字符串存储相对少量的文本。虽然 字符串本身可以是任何长度,您应该使用资产来存储 大量的文字。
您需要确保在用户输入和发送到CloudKit的内容之间正确存储和渲染换行符。