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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 2.0 在 Parse.com (REST API) 中上传图像并将其与用户关联

Swift,parse.com:如何从查询中传递数据

从 Parse.com (Swift) 检索数据

Swift - parse.com 的变量范围问题

Swift 无法从 parse.com 检索图像

iOS Swift Parse-Server 用户登录认证