2015-11-05 2 views
0

В моем приложении каждый пользователь настраивает страницу профиля, и вся эта информация хранится в Parse. Когда текущий пользователь нажимает кнопку, он переходит к tableViewController, который отображает в ячейках всех других пользователей приложения. В каждой ячейке есть кнопка, которую пользователь нажимает, чтобы просмотреть страницу полного профиля пользователя, которую они выбрали. У меня есть VC, настроенный для хранения всей информации, которую я просто не знаю, как отображать конкретного пользователя, выбранного в нем текущим пользователем. Как выделить выбранную информацию пользователей? Я прочитал документацию Parse по реляционным запросам, но, похоже, я не могу ее обойти. https://parse.com/docs/ios/guide#queries-relational-queriesОтображение определенного пользователя и всей их информации, хранящейся при разборе, на другом контроллере просмотра в Swift

Так что в мельчайших деталях в основном все мои пользователи отображаются на ВК. Он имеет имя и изображение профиля, когда пользователь нажимает на кнопку информации рядом с определенным пользователем, он должен открыть новый экран и отобразить всю эту информацию пользователей, хранящуюся в 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 без использования objectId, потому что в верхней части каждой ячейки он каждый раз возвращает другого пользователя в зависимости от настроек, ранее установленных на другой VC, например, только показывать пользователей в определенной возрастной группе и т. д. Я знаю, что я должен установить какой-то идентификатор на нажатой кнопке, но у меня полная потеря. Единственная онлайн-помощь, которую я могу найти, устанавливается для других языков, например. https://parse.com/docs/js/guide#users-querying> Так что я догадался, что мой вопрос:

1. Кто-нибудь знает учебник, на который они могут навестить меня.

2. Кто-нибудь знает, как я даже начинаю, и я могу оттуда сам.

3.Can помочь?

* Swift и Parse newbie мало что не имеют опыта работы на других языках.

Новый код в 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

Вы собираетесь нужно сделать несколько вещей для этой работы.Во-первых, в контроллере представления, который вы используете для отображения информации другого пользователя, вам необходимо установить свойство, подобное 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 
} 

Там, теперь у вас есть целый ряд объектов, который содержит ссылку на каждый пользователь. Когда кто-то использует ваше приложение и выбирает ячейку, вы можете выполнить подготовку к методу segue, как указано выше.

Обратите внимание, что я также заметил, что у вас есть переменная didSet в вашем новом контроллере. Вызов функции для обновления пользовательского интерфейса после установки этой переменной не будет работать и может произойти сбой, поскольку в контроллере представления еще нет окна.

+0

Hi @ pbush25 благодарит за вашу помощь, безусловно, правильный путь. Я чуть ли не сработал, за исключением последней строки в коде на VC1. Я отредактировал свой ответ выше, чтобы показать новый код. В очередной раз благодарим за помощь! – Grace

+0

Как хранятся ваши объекты, которые вы используете для заполнения таблицыView? – pbush25

+0

В пользовательской ячейке. – Grace

Смежные вопросы