在Swift

时间:2015-11-05 01:35:39

标签: ios swift parse-platform swift2 local-datastore

在我的应用中,每个用户都会设置一个个人资料页面,所有这些信息都存储在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)


    }
}
}

1 个答案:

答案 0 :(得分: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将不起作用,并且可能会崩溃,因为视图控制器还没有窗口。