0

在我的应用程序中,每个用户都设置了一个个人资料页面,所有这些信息都存储在 Parse 上。当当前用户点击一个按钮时,它会切换到一个 tableViewController,它会在单元格中显示应用程序上的所有其他用户。在每个单元格中都有一个按钮,用户按下该按钮可以查看他们选择的用户的完整个人资料页面。我设置了一个 VC 来保存我只是不知道如何显示当前用户选择的特定用户的所有信息。如何挑选出选定的用户信息?我已经阅读了有关关系查询的 Parse 文档,但我似乎无法理解它。https://parse.com/docs/ios/guide#queries-relational-queries

所以更详细地说,基本上我所有的用户都在 VC 上显示。它有姓名和头像,当用户点击某个用户旁边的信息按钮时,它应该打开一个新屏幕并显示存储在 Parse 上的所有这些用户信息。

我尝试在课堂外创建一个静态

struct Data { var OtherName:String! var id:String! }

然后在我的 ViewDidLoad 中:

    let query = PFQuery(className: "_User")
    //  otherQuery.orderByDescending("createdAt")
    query.whereKey("username", notEqualTo:PFUser.currentUser()!.username!)
    query.findObjectsInBackgroundWithBlock { (users: [AnyObject]?, error: NSError?) -> Void in

        if error == nil {
            // success

            print(users!.count)
            for user in users! {
                self.imageFiles.append(user["image"] as! PFFile)
                self.instrumentText.append(user["instrument"] as! String)
                self.nameText.append(user["name"] as! String)
                self.ageText.append(user["age"] as! String)
                // self.locationText.append(user["location"] as! PFGeoPoint)

                var singleData = Data()
                singleData.id = user.objectId
                singleData.OtherName = user["name"] as! String
                print("\(singleData)")


            } // users

然后在信息按钮连接到的 VC 上,我试图调用它并仅使用所选用户上传每个标签。

        self.userName.text = "" as String

但是“”保持空白。

然后我在想,如果我添加,当按下更多信息按钮时,它被按下的用户被选中并被添加到 Parse 上的选定字符串中,然后我只需要在我的时候从选定的字符串中调用用户在所选用户的个人资料页面上并以这种方式调用信息,然后当用户单击后退按钮时,不再选择该用户。似乎我会添加和带走很多用户以在 Parse 中“选择”有更好的方法吗?

我能够显示所有用户信息,但是如何在不使用 objectId 的情况下仅显示 Parse 中选择的用户,因为在每个单元格的顶部,它每次都会在此处返回不同的用户,具体取决于先前在不同 VC 上设置的设置,例如因为只显示特定年龄段的用户等。我知道我必须在触摸的按钮上设置某种 ID,但我完全不知所措。我能找到的唯一在线帮助是为其他语言设置的,例如。https://parse.com/docs/js/guide#users-querying > 所以我想我的问题是:

1.有没有人知道他们可以指点我的教程。

2.有谁知道我是怎么开始的,我可以自己从那里开始。

3.有人可以帮忙吗?

*Swift 和 Parse 新手几乎没有其他语言的经验。

firstVC 中的新代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "userProfileDetailsSegue" {
    if let indexPath = resultsPageTableView.indexPathForSelectedRow {

        let controller = (segue.destinationViewController) as! UserProfileDetailsViewController

  ***error here: UserProfileDetailsViewController.userToShowDetail = indexPath.row
    //line above is the one I can't get to work it needs to equal to the cell selected?
    }
  }
}

destinationVC 中的新代码:

 var userToShowDetail: PFUser? {
    didSet {
        self.configureView()
    }
}

func configureView() {
    // Update the user interface for the detail item.
    if let userToShowDetail: PFUser = self.userToShowDetail {
        if let label = self.userName {
            nameText.append(userToShowDetail["name"] as! String)

           // self.nameText.append(user["name"] as! String)


    }
}
}
4

1 回答 1

1

您需要做几件事才能使其正常工作。首先,在您用来显示其他用户信息的视图控制器中,您需要设置一个属性,例如var userToShowDetail: PFUser?. 然后在您的应用程序所有用户的视图中,您需要创建一个 segue 将他们从当前视图带到详细视图。假设您使用的是 TableView,您可以仅将一个原型单元格连接到您尝试导航的详细视图。然后,您需要覆盖prepareForSegue并将新视图控制器的用户设置为等于所选行的用户。我不知道你是如何存储你的应用程序用户对象的,但你应该能够做这样的事情。

override fun prepareForSegue(segue: UIStoryboardSegue) {
    if segue.identifer == "segueToShowDetailInfo" {
        //get the index path for the row that was selected
        let indexPath = self.tableView.indexPathForSelectedRow()
        //get the PFUser object for that particular row
        let userToShow = self.appUsers[indexPath.row]
        //create your new view controller
        let newVc = segue.destinationViewController as! DestinationVC
        //assign the new vc's property to your object
        newVc.userToShowDetail = userToShow
    }
}

但是在您的查询中,您可能不应该有一个单独的用户数据不同部分的数组。您应该只创建一个数组,调用它var appUsers = [PFUser](),然后当您让用户返回您的查询时,只需说:

for user in users! {
    self.appUsers.append(user) as! PFUser
}

在那里,现在你有一个完整的对象数组,其中包含对每个用户的引用。当有人在使用您的应用程序并选择一个单元格时,您可以执行上述准备转场方法。

请注意,我还注意到您didSet的新视图控制器中有一个变量。设置此变量后调用函数更新 UI 将不起作用,并且可能会崩溃,因为视图控制器还没有窗口。

于 2015-11-05T06:08:42.167 回答