【发布时间】:2015-03-06 19:43:19
【问题描述】:
我正在使用 parse.com 制作一个待办事项应用程序。我有一个用户设置的数据,他们也应该能够将该数据分配给另一个用户。因此,用户设置了标题、文本和他们希望分配给的用户的名称。所有这些都存储在数据库中并且运行良好。当同一用户登录时,他们设置的数据会显示在表格视图控制器中。
但是,他们指定查看数据的用户不会显示。所以让我用代码解释一下。下面的代码允许用户在进入表格视图屏幕时查看他们设置的数据。下面的代码在 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 设置数据时,它会在他登录并进入表格视图时为他显示,但即使他分配给(例如)UserTwo 和 UserTwo 登录并进入数据所在的表格视图本来就是,我就是不知道怎么办??!
请帮助我或给我指导,我仍在寻找解决方案,我觉得它真的很简单,但我无法解决。
更新 *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 就不会相互擦除,因为它几乎就像一个刷新按钮,然后所有数据都从屏幕上擦除。
【问题讨论】:
-
会不会是权限问题?您确定第二个用户具有读取第一个用户创建的对象的读取权限吗?
-
哦?嗯,你是怎么做到的,我想可能就是这样! @piojo
-
我以为默认权限是“每个人都可以阅读所有内容”,所以可能不是这样。但是您可以查看解析 iOS/OSX 文档并搜索“ACL”——不过,我没有方便的链接。
-
另外,您还没有发布添加其他用户数据的代码。所以请确保这是正确的。 (或张贴。)
-
看看更新 2,我编辑了我的问题@piojo
标签: ios uitableview swift parse-platform pfquery