就像标题中所说的那样,我以查询返回限制为9调用firebase数据库,并且该应用程序运行时没有崩溃。但是当我将数字增加到10时,它突然崩溃了。我不知道为什么。
这是在视图控制器中调用的函数
func loadPosts() {
isLoadingPost = true
Api.Feed.getRecentFeed(withId: Api.User.CURRENT_USER!.uid, start: posts.first?.timestamp, limit: 9 ) { (results) in
if results.count > 0 {
results.forEach({ (result) in
self.posts.append(result.0)
self.users.append(result.1)
})
}
self.isLoadingPost = false
if self.refreshControl.isRefreshing {
self.refreshControl.endRefreshing()
}
self.activityIndicatorView.stopAnimating()
self.tableView.reloadData()
}
Api.Feed.observeFeedRemoved(withId: Api.User.CURRENT_USER!.uid) { (post) in
self.posts = self.posts.filter { $0.id != post.id }
self.users = self.users.filter { $0.id != post.uid }
self.tableView.reloadData()
}
}
这是其类中的函数
func getRecentFeed(withId id: String, start timestamp: Int? = nil, limit: UInt, completionHandler: @escaping ([(Post, UserModel)]) -> Void) {
var feedQuery = REF_FEED.child(id).queryOrdered(byChild: "timestamp")
if let latestPostTimestamp = timestamp, latestPostTimestamp > 0 {
feedQuery = feedQuery.queryStarting(atValue: latestPostTimestamp + 1, childKey: "timestamp").queryLimited(toLast: limit)
} else {
feedQuery = feedQuery.queryLimited(toLast: limit)
}
// Call Firebase API to retrieve the latest records
feedQuery.observeSingleEvent(of: .value, with: { (snapshot) in
let items = snapshot.children.allObjects
let myGroup = DispatchGroup()
var results: [(post: Post, user: UserModel)] = []
for (index, item) in (items as! [DataSnapshot]).enumerated() {
myGroup.enter()
Api.Post.observePost(withId: item.key, completion: { (post) in
Api.User.observeUser(withId: post.uid!, completion: { (user) in
**results.insert((post, user), at: index)** //when limit is greater than 10 - app crashes here with exc_bad_instruction error
print(index)
myGroup.leave()
})
})
}
myGroup.notify(queue: .main) {
results.sort(by: {$0.0.timestamp! > $1.0.timestamp! })
completionHandler(results)
}
})
}
当限制高于9时,应用会在星星所在的位置崩溃
答案 0 :(得分:0)
我想到的是,您在LastName, FirstName - Unit <first.last@SomeDomain.com>; LastName, FirstName - Unit <first.last@SomeDomain.com>; LastName, FirstName - Unit <first.last@SomeDomain.com>; FirstName - Unit <first.last@SomeDomain.com>; FirstName <first.last@SomeDomain.com>; LastName, FirstName - Unit <first.last@SomeDomain.com>; LastName - Unit <first.last@SomeDomain.com>; LastName, FirstName - Unit <first.last@SomeDomain.com>;
中进行了观察,而不是一次观察,因此在发生最后一次休假后,调用了complete,然后再次调用了该行
Api.Post.observePost
该数组何时
results.insert((post, user), at: index)
由于取消分配而不存在