2014-11-05 1 views
0

У меня есть приложение вроде instagram, где мне нужно установить отношения между пользователями. Для этого я решил использовать метод таблицы соединений. Это просто таблица с названием «Активность», в которой я создал строки «fromUser», «toUser» и строку типа «тип» типа активности, которая в этом случае имеет значение «followAction».Swift + Parse.com: как получить отношение пользователя с помощью таблицы соединений

Вот как я создал таблицу:

var activity = PFObject(className:"Activity") 

     let currentUser = PFUser.currentUser() 

     let follow : String = "followingAction" 

     activity.setObject(currentUser, forKey: "fromUser") 
     activity.setObject(user, forKey: "toUser") // user is a another PFUser in my app 

     activity.setObject(follow, forKey: "type") 

     activity.saveEventually() 

Хорошо, теперь я хочу, чтобы извлечь все пользователи, которые им в настоящее время следующие (CurrentUser) и отображать их в Tableview

После док https://parse.com/docs/relations_guide#manytomany-jointables

Я сделал это, но только дал мне массив пользователей, которые содержат только объект userId, у меня не может быть адреса электронной почты, которые настроены в обычной таблице пользователя:

 func loadUser() { 

    followingUserList.removeAllObjects() 

    let findUserObjectId =  PFQuery(className: "Activity") 
    findUserObjectId.whereKey("fromUser", equalTo: userPassed) 
    findUserObjectId.whereKey("type", equalTo: "followingAction") 


    findUserObjectId.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!, error:NSError!) -> Void in 
     if error == nil { 
      // The find succeeded. 
      println("succesfully loaded the fromUser in Activity class") 
      // Do something with the found objects 
      for object in objects { 

       let user : PFUser = object["toUser"] as PFUser 



         self.followingUserList.addObject(user) 
         println("User added to following user list : \(user)") 
         println("followingUserlist = \(self.followingUserList)") 

         self.tableView.reloadData() 


      } } else { 
      // Log details of the failure 
      println("error loadind user ") 
      println(error) 
     } 
    } 
} 

если я напечатать followingUserList, который является массивом, где я поставил неправдоподобные пользователей, вот что у меня есть:

followingUserlist = (
"<PFUser: 0x7d9b93c0, objectId: DQJihBpW5E, localId: (null)> {\n}" 
) 

Когда я сделать обычный запрос (PFUser.query()) для регулярного таблица пользователей, у меня есть более подробно:

например:

<PFUser: 0x7db5af80, objectId: niwftRrB5x, localId: (null)> { 
backgroundImage = "<PFFile: 0x7db5f080>"; 
email = "[email protected]"; 
emailVerified = 0; 
profileImage = "<PFFile: 0x7db62910>"; 
username = kiki; 
} 

Здесь мы можем видеть, у меня есть полный PFUser с ним по электронной почте, имя пользователя и т.д. и т.п.

Поскольку «fromRow» в моей таблице «Activity» является указателем на мою обычную таблицу пользователей, почему полученный результат в моем методе loadUser() не завершен?

ответ

1

Ok я наконец нашел решение, я просто использовал метод getObjectInBackgroundWithId так:

func loadUser() { 

    followingUserList.removeAllObjects() 

    let findUserObjectId =  PFQuery(className: "Activity") 
    findUserObjectId.whereKey("fromUser", equalTo: userPassed) 
    findUserObjectId.whereKey("type", equalTo: "followingAction") 


    findUserObjectId.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!, error:NSError!) -> Void in 
     if error == nil { 
      // The find succeeded. 
      println("succesfully loaded the fromUser in Activity class") 
      // Do something with the found objects 
      for object in objects { 

       let user : PFUser = object["toUser"] as PFUser 

       let queryUsers = PFUser.query() 
       queryUsers.getObjectInBackgroundWithId(user.objectId, block: { (userGet :PFObject!,error : NSError!) -> Void in 
        self.followingUserList.addObject(userGet) 
        self.tableView.reloadData() 

       }) 


      } } else { 
      // Log details of the failure 
      println("error loadind user ") 
      println(error) 
     } 
    } 
} 
+0

является «followingUserList» массив вы инициализируетесь некоторые где в коде? – kareem