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的不同阶段做到了这一点 -
我在noteObjects.count
ViewDidload
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
如果我移动到另一个View然后再次打开这个tableView它会继续给出sae结果,(首先注意object.count = 0)
我想使用那个noteObjects.count,以便我可以确认,如果tableView的数据源为空,这样我就可以显示一条消息,但是当我使用它时,它总是显示我的tableview是空的,因为at首先noteObjects.count是0
如果上面提供的详细信息不够,请告诉我,我会解决它
答案 0 :(得分:1)
api调用'findeObjectsInBackground'是异步的,意味着在不同的线程中获得结果时,后续执行闭包。因此,在数据准备就绪时返回主线程并重新加载表视图将解决问题。您可以阅读有关这些类型的闭包的更多信息,因为它们在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)
}
}
答案 1 :(得分: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在更新其值
后正在检查答案 2 :(得分:0)
在同步方法
之后使用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()
}