我正在尝试填充数组postCaptions。 我需要将此数组返回到numberOfRowsInSection以获取我的表视图,但每次都返回一个空数组。
// ▼ selecting the toBeTested element
update({_id: req.params.parentid, 'toBeTested.thingsTested': 'A3'},
// ▼ referencing the selected element
{$pull: {'toBeTested.$.thingsTested': 'A3'}}});
我知道问题在于线程的顺序,我理解这一点,但我不确定我能做些什么来使数组在查询之外保持填充。我已经看到这是解决这个问题的方法,但我真的没有找到一个直截了当的答案,我可以在我的代码中解决这个问题。如果有人能提供适合我的代码的答案,这将是惊人的!:)我已经坚持这个问题超过一个星期了
var postCaptions = [String]()
query2.whereKey("userid", equalTo: PFUser.current()?.objectId!)
query2.findObjectsInBackground(block: { (objects, error) in
if let userPosted = objects {
for object in userPosted {
if let userPost = object as? PFObject {
self.postImageFiles.append(userPost["userPostImage"] as! PFFile)
self.postLocation.append(userPost["userPostLocation"] as! String)
self.postCaptions.append(userPost["postCaption"] as! String)
print(self.postCaptions.count) //returns value of 2 for the two posts that I've made
self.tableView.reloadData()
self.refresher.endRefreshing()
}
}
}
})
print(self.postCaptions.count) //Returns empty array
** cellForRowAt
var postCaptions = [String]() {
didSet {
// Do any execution that needs to wait for postCaptions here.
}
}
答案 0 :(得分:0)
如果我理解你的问题,那就相当简单了。将var postCaptions = [String]()
设置为所需类中的全局变量。然后按照您的方式将迭代中的值附加到它。然后可以在代码的其他部分访问postCaptions值,您可以使用count属性。
答案 1 :(得分:0)
由于方法findObjectsInBackground
表明它是在后台执行的,这意味着它与您的UI无关,因此在此函数完成之前,您的数组将保持为空。在您打印该数组时,此功能尚未完成,因此postCaptions
现在将为空。
这就是为什么numberOfRows将为零。
我认为您需要做的是将此查询放入viewDidLoad
或您指定的初始化程序,然后像完成程序段中那样调用tableView.reloadData()
。此外,您可能希望声明Bool,以确定表是否正在加载,并且在完成块中,在成功执行查询后将isLoading设置为false。
query2.findObjectsInBackground(block: { (objects, error) in
if let userPosted = objects {
self.isLoading = false
for object in userPosted {
if let userPost = object as? PFObject {
self.postImageFiles.append(userPost["userPostImage"] as! PFFile)
self.postLocation.append(userPost["userPostLocation"] as! String)
self.postCaptions.append(userPost["postCaption"] as! String)
print(self.postCaptions.count) //returns value of 2 for the two posts that I've made
}
}
self.tableView.reloadData()
self.refresher.endRefreshing()
}
})
并在numberOfRowsInSection
内:
if isLoading { //you need to declare isLoading
return 1 //maybe a dummy cell to tell user the table is loading
} else {
return postCaptions.count
}