我正在使用 parse.com 制作待办事项应用程序。我有一个用户设置的数据,他们也应该能够将该数据分配给另一个用户。因此,用户设置标题、文本和他们希望将其分配给的用户的姓名。所有这些都存储在数据库中并且运行良好。当同一用户登录时,他们设置的数据会显示在 TableView Controller 中。
但是,他们指定查看数据的用户不会显示。所以让我用代码来解释。下面的代码允许用户在进入表格 View 屏幕时查看他们设置的数据。下面的代码在 viewDidAppear 函数中。
func fetchAllObjectsFromLocalDatastore() {
var query: PFQuery = PFQuery(className: "toDo")
query.fromLocalDatastore()
query.whereKey("username", equalTo: PFUser.currentUser().username)
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if (error == nil) {
var temp: NSArray = objects as NSArray
self.toDoObjects = temp.mutableCopy() as NSMutableArray
self.tableView.reloadData()
}else {
println(error.userInfo)
}
}
有了这个,我还有另一个功能:
func fetchAllObjects() {
PFObject.unpinAllObjectsInBackgroundWithBlock(nil)
var query: PFQuery = PFQuery(className: "toDo")
query.whereKey("username", equalTo: PFUser.currentUser().username)
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if (error == nil) {
PFObject.pinAllInBackground(objects, block: nil)
self.fetchAllObjectsFromLocalDatastore()
}else {
println(error.userInfo)
}
}
}
他想查看该数据的用户已在添加新待办事项屏幕中分配,并且有效。它甚至显示在 Parse.com 数据库中。但是我如何查询或获取它以显示数据已分配给数据的用户的数据,而不仅仅是设置它的用户。
因此,当(例如)UserOne 设置数据时,当他登录并转到 TableView 时,它会出现在他面前,但即使当他分配给(例如)UserTwo 并且 UserTwo 登录并转到 TableView 时,数据也会出现本来就是,我只是不知道该怎么做??!
请帮助我或给我指导,我仍在寻找解决方案,我觉得它真的很简单,但我不能指手画脚。
更新 *2
设置数据时,会设置 UserOne 希望将数据访问权限授予谁。
所以这是我猜的保存过程:
@IBAction func saveAction(sender: UIBarButtonItem) {
self.object["username"] = PFUser.currentUser().username
self.object["title"] = self.titleField?.text
self.object["text"] = self.textView?.text
self.object["forUser"] = self.userToAssignTo?.text
self.object.saveEventually { (success, error) -> Void in
if (error == nil) {
}else{
println(error.userInfo)
}
}
然后我尝试查询 forUser:
func fetchAllObjects() {
PFObject.unpinAllObjectsInBackgroundWithBlock(nil)
var query: PFQuery = PFQuery(className: "toDo")
query.whereKey("forUser", equalTo: PFUser.currentUser().username)
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if (error == nil) {
PFObject.pinAllInBackground(objects, block: nil)
self.fetchAllObjectsFromLocalDatastore()
}else {
println(error.userInfo)
}
}
}
这似乎仍然没有用。我不确定我现在在做什么!该死的,我只是不知道如何让另一个用户看到一个用户设置的数据。
更新 3**
我找到了!这都是关于 viewDidAppear 函数的,所以这里是代码:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if (PFUser.currentUser() == nil) {
var logInViewController = PFLogInViewController()
logInViewController.delegate = self
var signUpViewController = PFSignUpViewController()
signUpViewController.delegate = self
logInViewController.signUpController = signUpViewController
self.presentViewController(logInViewController, animated: true, completion: nil)
}else {
//self.fetchAllObjectsFromLocalDatastore()
//self.fetchAllObjects()
self.fetchAllObjectsFromLocalDatastore2()
self.fetchAllObjects2()
}
}
这基本上是因为 fetchAllObjects 为“forUser”键清除了它。但现在我需要弄清楚如何做到这一点,这样 fetchAllObjects 就不会相互删除,因为它几乎就像一个刷新按钮,然后所有数据都会从屏幕上删除。
最佳答案
我一直在处理类似的问题,但是使用来自 parse 的推送通知。今天晚些时候我可以提供代码示例。有几种方法可以解决。当用户创建一个新的待办事项时,您可以为他们要分配给的用户设置一个自定义对象,您可以根据字段进行查询。您可以使用 saveinbackground 和 block 来保存待办事项。另一种方法是使用 PFRelation。观看了一些关于 team tree house 的类(class),以回顾和了解不同的技术,他们有一个是自毁消息传递应用程序,它使用解析功能来实现与您想要执行的操作非常相似的功能。
关于ios - Parse.com 多个用户访问数据 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906417/