在 Swift 中的不同视图控制器上显示特定用户及其存储在解析中的所有信息
Display a particular user and all their information stored on parse on a different View Controller in Swift
在我的应用程序中,每个用户都设置了一个个人资料页面,所有这些信息都存储在 Parse 上。当当前用户点击一个按钮时,它会转到一个 tableViewController,该 tableViewController 在单元格中显示应用程序上的所有其他用户。在每个单元格中都有一个按钮,用户按下该按钮可以查看他们选择的用户的完整个人资料页面。我有一个 VC 设置来保存所有我只是不知道如何显示当前用户选择的特定用户的信息。如何挑出选定的用户信息?我已经阅读了有关关系查询的 Parse 文档,但我似乎无法理解它。 https://parse.com/docs/ios/guide#queries-relational-queries
所以更详细地说,基本上我所有的用户都显示在 VC 上。它有名字和个人资料图片,当用户点击某个用户旁边的信息按钮时,它应该打开一个新屏幕并显示存储在 Parse 上的所有这些用户信息。
我尝试在 class
之外创建静态
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 中添加和带走很多用户到 "chosen" 有没有更好的方法?
我能够显示所有用户信息,但我如何在不使用 objectId 的情况下只显示从 Parse 中选择的用户,因为在每个单元格的顶部,它会 return 每次在这里显示不同的用户,具体取决于关于之前在不同 VC 上设置的设置,例如仅显示特定年龄段的用户等。我知道我必须在触摸的按钮上设置某种 ID,但我完全不知所措。我能找到的唯一在线帮助是为其他语言设置的,例如。 https://parse.com/docs/js/guide#users-querying>
所以我想我的问题是:
1.Does 任何知道教程的人都可以向我指出。
2.Does 任何人都知道我是如何开始的,我可以自己从那里开始。
3.Can有人帮忙吗?
*Swift 和 Parse 新手几乎没有其他语言的经验。
新码先VC:
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?
}
}
}
目的地新代码VC:
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)
}
}
}
您需要做一些事情才能使其正常工作。首先,在您用来显示其他用户信息的视图控制器中,您需要设置一个 属性,例如 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
}
好了,现在您拥有了一个完整的对象数组,其中包含对每个用户的引用。当有人正在使用您的应用程序并选择一个单元格时,您可以执行上面的 prepare for segue 方法。
请注意,我还注意到您在新视图控制器中的变量上有一个 didSet
。设置此变量后调用函数更新 UI 将不起作用,并且可能会崩溃,因为视图控制器还没有 window。
在我的应用程序中,每个用户都设置了一个个人资料页面,所有这些信息都存储在 Parse 上。当当前用户点击一个按钮时,它会转到一个 tableViewController,该 tableViewController 在单元格中显示应用程序上的所有其他用户。在每个单元格中都有一个按钮,用户按下该按钮可以查看他们选择的用户的完整个人资料页面。我有一个 VC 设置来保存所有我只是不知道如何显示当前用户选择的特定用户的信息。如何挑出选定的用户信息?我已经阅读了有关关系查询的 Parse 文档,但我似乎无法理解它。 https://parse.com/docs/ios/guide#queries-relational-queries
所以更详细地说,基本上我所有的用户都显示在 VC 上。它有名字和个人资料图片,当用户点击某个用户旁边的信息按钮时,它应该打开一个新屏幕并显示存储在 Parse 上的所有这些用户信息。
我尝试在 class
之外创建静态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 中添加和带走很多用户到 "chosen" 有没有更好的方法?
我能够显示所有用户信息,但我如何在不使用 objectId 的情况下只显示从 Parse 中选择的用户,因为在每个单元格的顶部,它会 return 每次在这里显示不同的用户,具体取决于关于之前在不同 VC 上设置的设置,例如仅显示特定年龄段的用户等。我知道我必须在触摸的按钮上设置某种 ID,但我完全不知所措。我能找到的唯一在线帮助是为其他语言设置的,例如。 https://parse.com/docs/js/guide#users-querying> 所以我想我的问题是:
1.Does 任何知道教程的人都可以向我指出。
2.Does 任何人都知道我是如何开始的,我可以自己从那里开始。
3.Can有人帮忙吗?
*Swift 和 Parse 新手几乎没有其他语言的经验。
新码先VC:
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?
}
}
}
目的地新代码VC:
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)
}
}
}
您需要做一些事情才能使其正常工作。首先,在您用来显示其他用户信息的视图控制器中,您需要设置一个 属性,例如 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
}
好了,现在您拥有了一个完整的对象数组,其中包含对每个用户的引用。当有人正在使用您的应用程序并选择一个单元格时,您可以执行上面的 prepare for segue 方法。
请注意,我还注意到您在新视图控制器中的变量上有一个 didSet
。设置此变量后调用函数更新 UI 将不起作用,并且可能会崩溃,因为视图控制器还没有 window。