在单击屏幕之前,不会显示Tableview内容

时间:2016-01-22 20:58:21

标签: ios swift uitableview tableview cloudkit

使用云工具包填充表格视图,开发一个swift应用程序。

由于某些原因,当应用程序打开时,tableview显示为空白,但是一旦触摸屏幕,我的条目列表就会突然出现。

我已经在下面提供了我的整个Tableview大师班,我的想法是它与viewDidLoad()功能有关,但无论如何我似乎都无法解决这个问题。我尝试了什么。

import UIKit
import CloudKit
import MobileCoreServices

class MasterViewController: UITableViewController {

    //// DB setup (outside DidLoad)
    let container = CKContainer.defaultContainer()
    var Database: CKDatabase?
    var currentRecord: CKRecord?

    var detailViewController: DetailViewController? = nil

    ///Array to save dbrecords
    var objects = [CKRecord]()

    /// Initialise object of ClipManager class
    let MyClipManager = ClipManager()






    override func viewDidLoad() {
        super.viewDidLoad()
        // Database loading on runtime
        Database = container.privateCloudDatabase

        ///Build Query
        let query = CKQuery(recordType: "CloudNote", predicate: NSPredicate(format: "TRUEPREDICATE"))

        ///Perform query on DB
        Database!.performQuery(query, inZoneWithID: nil) { (records, error) -> Void in
            if (error != nil) {
                NSLog("Error performing query. \(error.debugDescription)")
                return
            }

            self.objects = records!
            self.tableView.reloadData()
        }


        // Do any additional setup after loading the view, typically from a nib.
        self.navigationItem.leftBarButtonItem = self.editButtonItem()

        let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "insertNewObject:")
        self.navigationItem.rightBarButtonItem = addButton
        if let split = self.splitViewController {
            let controllers = split.viewControllers
            self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
        }
    }

    override func viewWillAppear(animated: Bool) {
        self.clearsSelectionOnViewWillAppear = self.splitViewController!.collapsed
        super.viewWillAppear(animated)
    }




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





    // Tableview stuff --- Done

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
            /////// Get number of rows
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return objects.count
    }
            //// FIll the table
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)

        let object = objects[indexPath.row] 
        cell.textLabel!.text = object.objectForKey("Notes") as? String
        return cell
    }

    override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        // Return false if you do not want the specified item to be editable.
        return true
    }
    //// Deleting the table
    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        if editingStyle == .Delete {

            //DB call working
           MyClipManager.DeleteMethod(Database!, MyRecord:objects[indexPath.row])

            objects.removeAtIndex(indexPath.row)
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)


        } else if editingStyle == .Insert {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
        }
    }


}

3 个答案:

答案 0 :(得分:4)

考虑到重载是在完成处理程序中发生的,我假设它在后台线程上。尝试将UI更新分发回主线程。

(在这里输入没有Xcode的样本,所以请检查我的语法。)

示例:

dispatch_async(dispatch_get_main_queue()) {
    self.tableView.reloadData()
}

答案 1 :(得分:0)

如果您尝试使用这些工具,它将起作用

DispatchQueue.main.async(execute: {
            self.tableView.reloadData()
        })

答案 2 :(得分:0)

Swift 5.2:

DispatchQueue.main.async{
  self.tableView.reloadData()
}