ios – 无需下载数据即可获取CKAsset URL

我在我的应用程序中使用CloudKit作为远程持久保存数据的方法.我的一个记录有一个CKAsset属性,用于保存图像.当我获取记录时,我意识到完成查询需要花费很多时间.经过多次测试,我得出结论,当您查询记录时,CloutKit会使用记录对象下载整个Asset文件.因此,当您从记录对象获取资产并请求它的fileURL时,它会为您提供本地文件路径URL而不是HTTP类型的URL.这对我来说是个问题,因为你必须让用户等待这么多时间才能在查询结束之前下载整个记录(及其相关图像).来自Parse背景,Parse用于为您提供HTTP URL,并且查询足够快以在加载图像异步时加载具有对象的UI.我的问题是,我怎样才能实现Parse的作用?我需要限制查询下载Assets数据并获取一个链接以异步加载图像.

解决方法

您可以使用CloudKit JavaScript访问资产的网址.这是一个例子;

(使用AlamofireSwiftyJSON)

func testRecordRequest() -> Request {
    let urlString = "https://api.apple-cloudkit.com/database/1/" + Constants.container + "/development/public/records/query?ckAPIToken=" + Constants.cloudKitAPIToken
    let query = ["recordtype": "TestRecord"]
    return Alamofire.request(.POST,urlString,parameters: ["query": query],encoding: .JSON,headers: nil)
}@H_502_9@ 
 

JSON响应包含资产的“downloadURL”.

"downloadURL": "https://cvws.icloud-content.com/B/.../${f}?o=AmVtU..."@H_502_9@ 
 

“${f}”似乎是一个变量,因此将其更改为您喜欢的任何内容.

let downloadURLString = json["fields"][FieldNames.image]["value"]["downloadURL"].stringValue
let recordName = json["recordName"].stringValue
let fileName = recordName + ".jpg"
let imageURLString = downloadURLString.stringByReplacingOccurrencesOfString("${f}",withString: fileName)@H_502_9@ 
 

现在我们可以使用这个urlString创建一个NSURL并将其用于任何图像和缓存解决方案,如Kingfisher,HanekeSwift等.(您可能还想保存图像类型png / jpg)

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...