tableview 数据源数组值自动变为0

tableview's Datasource array's value is automatically changes to 0

 var noteList:NSMutableArray = NSMutableArray() // declaration of `noteObjects`


    query.findObjectsInBackgroundWithBlock { ( objects, error) -> Void in

        if (error == nil) {


            let temp: NSArray = objects as NSArray!



            self.noteList = temp.mutableCopy() as! NSMutableArray


            self.tableView.reloadData()

        }else {
            print(error!.userInfo)

        }
    }
    //populating noteObjects

我有一个 tableView,它的数据源是一个数组 'noteObjects' 它的类型是 NSMutableArray ,所以问题是每次我打开我的 tableView 我的 'noteObjects' 数组的值为 0 但随后它会自动更改到期望值,我该怎么说呢?我在我的 tableViewController 的不同阶段做了这个 -

我在 ViewDidload

中打印了 noteObjects.count
override func viewDidLoad() {
       super.viewDidLoad()


    print("\(noteObjects.count) viewDidlaod3") }  

输出:

0 viewDidlaod3

里面 cellForRowAtindexPath 我打印了这个

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

  print("\(noteObjects.count) in cellForAtIndexPath")       
return cell }

输出: 18 in cellForAtIndexPath

如果我移动到另一个视图然后再次打开这个 tableView 它会一直给出 sae 结果,(注意 object.count 首先 = 0)

我想使用那个 noteObjects.count 以便我可以确认如果 tableView 的数据源是空的所以我可以显示一条消息,但是当我使用它时它总是显示我的 tableview 是空的因为在第一个 noteObjects.count 是 0

如果上面提供的详细信息还不够,请告诉我,我会解决的

刚刚将我的代码从 viewDidLoad 移至 viewDidAppear,它对我有效

override func viewDidAppear(animated: Bool) {
      super.viewDidAppear(animated)



        self.fetchAllObjectsFromLocalDataStore()

    print("\(noteObjects.count) view appears")



    if noteObjects.count < 1 {

        let Alert = UIAlertView(title: "No Data to Display", message: "ther's nothing bro you should pull to refresh", delegate: self, cancelButtonTitle: "OKAY Got IT")
        Alert.show()

    }
    } 

现在 noteObject.count 在更新其值后接受检查

api 调用 'findeObjectsInBackground' 是异步的,这意味着当在不同的线程中获得结果时,闭包将在稍后的时间执行。所以回到主线程并在数据准备好时重新加载 table 视图将解决问题。您可以阅读更多有关这些类型的闭包的信息,因为它们在 iOS 中非常常见。

query.findObjectsInBackgroundWithBlock { ( objects, error) -> Void in

        if (error == nil) {
            let temp: NSArray = objects as NSArray!
            dispatch_async(dispatch_get_main_queue(), {
                 self.noteList = temp.mutableCopy() as! NSMutableArray
                 self.tableView.reloadData()
            })
        } 
        else {
            print(error!.userInfo)
        }
}

在同步方法后使用 if 语句

  if noteObjects.count < 1 {

    let Alert = UIAlertView(title: "No Data to Display", message: "ther's nothing bro you should pull to refresh", delegate: self, cancelButtonTitle: "OKAY Got IT")
    Alert.show()

}