Parse.com 多用户访问数据 - Swift
Posted
技术标签:
【中文标题】Parse.com 多用户访问数据 - Swift【英文标题】:Parse.com Multiple Users accessing data - Swift 【发布时间】: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 【参考方案1】:我一直在处理类似的问题,但是来自 parse 的推送通知。我可以在今天晚些时候提供代码示例。有几种方法可以接近。当用户创建新的待办事项时,您可以使用他们想要分配的用户设置自定义对象,并且您可以根据该字段进行查询。您可以使用带有块的 saveinbackground 保存待办事项。另一种方法是使用 PFRelation。观看了有关团队树屋的一些课程,以回顾和了解不同的技术,他们有一个是自毁消息应用程序,它使用解析来实现与您想要做的非常相似的功能。
【讨论】:
啊哇,我可以看看一些例子吗?我对编码还是很陌生(只有 1 个月),我需要了解 cmets 和代码。顺便说一句,我想我确实尝试过这样做。我把它放在了 UserOne 必须输入标题、文本和他们希望能够看到数据的用户,然后我将其保存到我的 Parse.com 库中作为 forUser。但是当我查询它时,我只是不知道该怎么做。看看我在问题@jimrice 中的更新 是的,我可以在稍后进入办公室时提供一些代码。网站 teamtreehouse.com 是一个很好的入门资源,您的应用程序的基础与消息传递应用程序相同,不同之处在于他们示例中的消息将由您执行。他们有 14 天的试用期,将引导您完成一系列使用解析的示例,包括用户和关系。以上是关于Parse.com 多用户访问数据 - Swift的主要内容,如果未能解决你的问题,请参考以下文章