CloudKit 应用程序数据未显示在表格视图中

Posted

技术标签:

【中文标题】CloudKit 应用程序数据未显示在表格视图中【英文标题】:CloudKit app data not displaying in tableview 【发布时间】:2016-06-20 11:50:00 【问题描述】:

我的谓词/查询/执行查询代码正常,我的表格单元设置了正确的表格单元控制器和可重用标识符,我已经从我的 CKRecordType 的 valueForKey 中提取了 nameLabel 并且无法加载/查看更新的用户界面。

import UIKit
import CloudKit

class table: UITableViewController 
var categories: Array<CKRecord> = []

override func viewDidLoad() 
    super.viewDidLoad()


    func fetch()
       
    categories = []  
    let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
    let predicate = NSPredicate(value: true)
    let query = CKQuery(recordType: "Dining", predicate: predicate)
    publicDatabase.performQuery(query, inZoneWithID: nil)  (results, error) -> Void in
        if (error != nil)
        
            print("Error" + (error?.localizedDescription)!)
        
        else
        
            for result in results!
            
              self.categories.append(result)
            
            NSOperationQueue.mainQueue().addOperationWithBlock(  () -> Void in
                self.tableView.reloadData() 
            )
        
        self.fetch()      


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    // #warning Incomplete implementation, return the number of rows
    return self.categories.count


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCellWithIdentifier("dining") as! tablecell
    let restaurant: CKRecord = categories[indexPath.row]
    cell.nameLabel.text = restaurant.valueForKey("Name") as? String 
    return cell

override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.

 

如果需要更多信息,这里是实际项目:https://www.dropbox.com/sh/twt20r0sdauglhs/AAB6Y2CcxpT1hp0mBE_Znzgya?dl=0

【问题讨论】:

【参考方案1】:

重新访问一些旧代码后,我发现我需要将类别变量设置为

var categories: Array<CKRecord> = []

以及重新排列我的 fetch 函数中的一些括号。我需要将 fetch 函数的调用放在函数之外(愚蠢的错误),最后在调用 fetch() 后关闭 viewdidload 方法。

   func fetch()
        
    let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
    let predicate = NSPredicate(value: true)
    let query = CKQuery(recordType: "Dining", predicate: predicate)
    publicDatabase.performQuery(query, inZoneWithID: nil)  (results, error) -> Void in
        if (error != nil)
        
            print("Error" + (error?.localizedDescription)!)
        
        else
        
            for result in results!
            
              self.categories.append(result)
            

            NSOperationQueue.mainQueue().addOperationWithBlock(  () -> Void in
                self.tableView.reloadData()
            )
        
        

     fetch()   

【讨论】:

以上是关于CloudKit 应用程序数据未显示在表格视图中的主要内容,如果未能解决你的问题,请参考以下文章

cloudkit 数据未显示在提交的应用程序 iOS 8.1 中

嵌套 CloudKit 查询和 UITableView

UITableView 单元格未填充 CloudKit 数据

等待函数首先执行,然后再移动到下一行代码

从 CloudKit 检索新数据后更新 tableView 数据

AFNetworking 2.0 解析的数据未显示在表格视图中