在 Swift 中与 mongoDB 和 Parse 联合
Posted
技术标签:
【中文标题】在 Swift 中与 mongoDB 和 Parse 联合【英文标题】:Jointure with mongoDB and Parse in Swift 【发布时间】:2017-07-11 16:00:08 【问题描述】:我正在尝试在 mongoDB 上创建“用户”和“评论”之间的连接,以便在我的应用上安装 cmets。
这是我的代码:
let query = PFQuery(className: "comments")
query.whereKey("to", equalTo: commentuuid.last!)
query.skip = count - self.page
query.addAscendingOrder("createdAt")
query.findObjectsInBackground(block: (objects: [PFObject]?, error: Error?) in
if error == nil
// Clean up
self.usernameArray.removeAll(keepingCapacity: false)
self.avaArray.removeAll(keepingCapacity: false)
self.commentArray.removeAll(keepingCapacity: false)
self.dateArray.removeAll(keepingCapacity: false)
// find related objects
for object in objects!
let infoQuery = PFQuery(className: "_User")
infoQuery.getObjectInBackground(withId: object.object(forKey: "id") as! String, block: (test: PFObject?, error: Error?) in
if error == nil
print("YES")
self.usernameArray.append(test!.object(forKey: "username") as! String)
else
print(error!.localizedDescription)
)
self.commentArray.append(object.object(forKey: "comment") as! String)
self.dateArray.append(object.createdAt)
self.tableView.reloadData()
// Scroll to bottom
self.tableView.scrollToRow(at: IndexPath(row: self.commentArray.count - 1, section: 0), at: .bottom, animated: true)
else
print(error!.localizedDescription)
)
这些行执行得很好:
self.commentArray.append(object.object(forKey: "comment") as! String)
self.dateArray.append(object.createdAt)
但那个不是:
let infoQuery = PFQuery(className: "_User")
infoQuery.getObjectInBackground(withId: object.object(forKey: "id") as! String, block: (test: PFObject?, error: Error?) in
if error == nil
print("YES")
self.usernameArray.append(test!.object(forKey: "username") as! String)
else
print(error!.localizedDescription)
)
我尝试在 cellForRowAt 函数中打印 usernameArray 和 dateArray(只是为了看看区别)。
当我启动视图时,usernameArray 是空的,而 dateArray 不是。如果我稍微滚动一下,usernameArray 就会被填充(但我需要滚动才能填充数组,这是不可接受的)。
【问题讨论】:
【参考方案1】:可能是因为您在检索数据之前调用了 UI 相关方法:
self.commentArray.append(object.object(forKey: "comment") as! String)
self.dateArray.append(object.createdAt)
let infoQuery = PFUser.query()!
infoQuery.getObjectInBackground(withId: object.object(forKey: "id") as! String, block: (test: PFObject?, error: Error?) in
if error == nil
print("YES")
self.usernameArray.append(test!.object(forKey: "username") as! String)
else
print(error!.localizedDescription)
// These two methods were the issue.
self.tableView.reloadData()
// Scroll to bottom
self.tableView.scrollToRow(at: IndexPath(row: self.commentArray.count - 1, section: 0), at: .bottom, animated: true)
)
您应该考虑:
使用子分类PFObject
避免访问可能因拼写错误而导致错误的原始字典。
将关键字 object
替换为更好的关键字(根据您的上下文,comment
)
【讨论】:
以上是关于在 Swift 中与 mongoDB 和 Parse 联合的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中与 UIActivityViewController 共享字典
在 mongodb 中,如何仅选择文档中与 find() 条件匹配的对象?
MongoDB 中与 Ruby 一起使用的字符串数据类型的最大长度是多少?
如何在 iOS Swift 中与 UIActivityViewController 共享的 WhatsApp 中设置不同的参数?
如何准备 API 响应以在 swift 中与 jsonDecoder 一起使用
如何在 iOS 上将“MongoDB 日期时间(ISO 日期)”解析为 NSDate(swift 和 Objective-c)