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

标签 ios iphone swift cloudkit

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

我设置了 cloudkit 来存储字符串和图片,然后创建了一个 fetchData 方法来查询 cloud kit。就代码(下面的示例)而言,它可以工作并获取数据/图片。我的问题是,当我运行应用程序时,文本和图像更新需要将近 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 记录似乎无法识别换行符。如果您能帮助回答我的问题,我将不胜感激。

最佳答案

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

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

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

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

关于文本段落的存储,你应该考虑使用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 的内容之间正确存储和呈现换行符。

关于ios - Cloudkit获取数据(字符串和图像资源)在调用后需要很长时间才能出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31622924/

相关文章:

ios - 从不同的pickerView中获取值(value)

ios - 在 NativeScript 中执行 XHR-Request 时出现 UICollectionViewFlowLayout 异常

ios - 不需要的信息显示在 NSString 的文本标签中

ios - 在 Swift 中使用视觉格式通过约束格式化 TextView

ios - Swift - 惰性变量是线程安全的吗?

objective-c - Restkit 加载的嵌套核心数据实体导致 NSObjectInaccessibleException

iphone - UIPopoverController presentPopoverFromRect 崩溃

iphone - 使用 UISlider 在 MKMapView 上将半径更改为 MKCircle

iphone - 如何停止在 Iphone Safari 中的两个表之间显示正文背景

ios - 在 JWTCryptoSecurity 类中找不到方法 keyFromPemFileWithName