据我所知,以下代码(或非常接近它)将从recordtype数组中检索一个cloudkit实例...
let pred = NSPredicate(value: true)
let query = CKQuery(recordType: "Stores", predicate: pred)
publicDatabase.performQuery(query, inZoneWithID: nil) { (result, error) in
if error != nil
{
print("Error" + (error?.localizedDescription)!)
}
else
{
if result?.count > 0
{
let record = result![0]
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.txtDesc.text = record.objectForKey("storeDesc") as? String
self.position = record.objectForKey("storeLocation") as! CLLocation
let img = record.objectForKey("storeImage") as! CKAsset
self.storeImage.image = UIImage(contentsOfFile: img.fileURL.path!)
....(& so on)
然而,我将如何以及何时(代码中的物理位置?)进行查询,以便我可以将每个单元格设置为我的DiningType记录中每个实例的信息?
例如,我会在didreceivememory警告函数内查询吗?还是在cellforRowatIndexPath中?或其他!如果我在上面的代码中误解了,请在笔记中记下来,此时的所有帮助都很有价值,非常感谢。
答案 0 :(得分:0)
如果没有更多信息,我会对未显示的其余代码做一些假设。我会假设:
当您调用代码从数据库中检索记录时(在本例中为CloudKit),数据最终应存储在您的Array中。当您的Array更改(新数据或更新数据)时,您将调用tableView.reloadData()来告诉tableView某些内容已更改并重新加载单元格。
单元格在tableView(:cellForRowAtIndexPath :)中连接(手动)。它为每个项调用此方法(假设您实现了tableView(:numberOfRowsInSection :)和numberOfSectionsInTableView(_:)
如果您不熟悉使用UITableView,一开始看起来很难。如果您想看一个简单的UITableView连接示例,请告诉我!
答案 1 :(得分:-1)
首先,我必须处理典型的cloudkit要求:设置容器,publicdatabase,谓词和查询输入。然后,我让公共数据库执行查询,在这种情况下,记录类型为“DiningType”。通过程序的第一个if语句,如果发现错误,控制台将打印“错误”并结束进一步的操作。但是,如果未发现运行时问题,则发现与查询相关的每个结果都将附加到viewdidload函数上方创建的categories数组中。
var categories: Array<CKRecord> = []
override func viewDidLoad() {
super.viewDidLoad()
func fetchdiningtypes()
{
let container = CKContainer.defaultContainer()
let publicDatabase = container.publicCloudDatabase
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "DiningType", predicate: predicate)
publicDatabase.performQuery(query, inZoneWithID: nil) { (results, error) -> Void in
if error != nil
{
print("Error")
}
else
{
for result in results!
{
self.categories.append(result)
}
NSOperationQueue.mainQueue().addOperationWithBlock( { () -> Void in
self.tableView.reloadData()
})
}
}
}
fetchdiningtypes()