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()
}
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()
}