2016-11-18 7 views
3

Я проделал следующую функцию, где пользователи могут следовать друг за другом. Проблема в том, что он не используется так, как должен. В тот момент, когда пользователь пишет пост он будет сохранен в моей базе данных Firebase по этой ссылке:Показать сообщения от пользователей, которые вы используете - swift

FIRDatabase.database().reference().child("feed-items").childByAutoId()

Ходовые элементы, где все посты. Я меняюсь, что, однако сейчас, так что, когда пользователь размещает что-то он будет сохранен здесь:

FIRDatabase.database().reference().child("Users").child(UserID).child("Posts").childByAutoId()

я, потому что это как-то мне подсказывает, что будет легче показывать только сообщения людей, которых вы следуйте в моем фиде приложений.

На данный момент я получаю все сообщения за мой канал (от питательных элементов), как это:

func startObersvingDB() { 
     FIRDatabase.database().reference().child("feed-items").observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in 
      var newUpdates = [Sweet]() 



      for update in snapshot.children { 
       let updateObject = Sweet(snapshot: update as! FIRDataSnapshot) 
       newUpdates.append(updateObject) 

      } 

      self.updates = newUpdates.reverse() 
      self.tableView.reloadData() 


     }) { (error: NSError) in 
      print(error.description) 
     } 
    } 

И тогда я называю startObservingDB() в viewDidLoad.

Если вы хотите, чтобы увидеть мою Sweet-структуру здесь:

import Foundation 
import FirebaseDatabase 
import FirebaseAuth 
import UIKit 

struct Sweet { 
    let key: String! 
    let content: String! 
    let addedByUser: String! 
    let profilePhoto: String! 
    let itemRef: FIRDatabaseReference? 


    init (content: String, addedByUser: String, profilePhoto: String!, key: String = "") { 
     self.key = key 
     self.content = content 
     self.addedByUser = addedByUser 
     self.profilePhoto = profilePhoto 
     self.itemRef = nil 

    } 

    init (snapshot: FIRDataSnapshot) { 
     key = snapshot.key 
     itemRef = snapshot.ref 
     path = key 
     if let theFeedContent = snapshot.value!["content"] as? String { 
      content = theFeedContent 
     } else { 
      content = "" 
     } 

     if let feedUser = snapshot.value!["addedByUser"] as? String { 
      addedByUser = feedUser 
     } else { 
      addedByUser = "" 
     } 

     if let feedPhoto = snapshot.value!["profilePhoto"] as? String! { 
      profilePhoto = feedPhoto 
     } else { 
      profilePhoto = "" 
     } 



    } 

    func toAnyObject() -> AnyObject { 
     return ["content":content, "addedByUser":addedByUser, "profilePhoto":profilePhoto!] 
    } 
} 

И в моем TableViewController я использую для отображения имен и т.д. в пользовательской ячейке:

var update = updates[indexPath.row] 

cell.nameLabel.text = update.addedByUser 

и т.д. и т. д.

Мой вопрос: Как изменить, что показывать только сообщения от людей, которых я придерживаюсь?

Извините за длинный пост

ответ

0

Если предположить, что вы сохраняете свой список последователей в качестве словаря в другой родительский узел, как это: -

user_followed_by :{ 
    userID2 : { 
     userID1 : true, 
     userID5 : true, 
     userID6 : true, 
     userID12 : true, 
     userID99 : true, 
    } 
    } 

users :{ 
    userID2 :{ 
     post :{ 
      postAutoID1 : {...}, 
      postAutoID2 : {...}, 
      ... 
       } 
      } 
    } 
    postsToShowToUser :{ 

    userID1 : { 
     postAutoID1 : true, //These are the post's autoID's of all the users whom 
           // your current user is following 
     postAutoID5 : true, 
     postAutoID3 : true, 
    }, 


    } 

/* // If you choose to declare a separate section of the post Details in your Database. 
    posts_Of_The_User :{ 

    userID1 : { 

     postAutoID1 : {...//DETAILS}, 
     postAutoID2 : {...//DETAILS}, 
     postAutoID3 : {...//DETAILS}, 
     .... 
      }, 

    } */ 

Идея заключается в том, что, когда пользователь которого ваш текущий пользователь делает сообщение. Это сообщение autoID добавляется в postsToShowToUser/userID.

То есть, если userID2 будет сделать пост, то вызов будет сделано, чтобы добавить, что пост в AutoID во всех пользователей postsToShowToUser/USERID, которые следуют за userID2.

PS: - Я настоятельно рекомендую вам переместить данные вашего сообщения из раздела post. Сделайте его отдельным родительским узлом, состоящим из нескольких postAutoID в качестве ключа, и после этого данные будут переданы как значение. Это может пригодиться позже, также позволит избежать вложенности данных, которые помогут вам перемещаться по вашей базе данных.

+0

Я не совсем уверен, что понимаю; вы говорите, что всякий раз, когда пользователь делает сообщение, он должен проверить, кто следит за этим пользователем, а затем добавить это сообщение всем пользователям, которые следуют за этим пользователем?:-) Невозможно это сделать; Когда пользователь отправляет что-то в свой профиль, то все текущие пользователи-последователи попадают в массив и проверяют наличие сообщений? У меня действительно нет подсказки, но добавление пользовательских сообщений mulitple места займет некоторое пространство - правильно? –

+0

В принципе позволяет пользователю получить доступ к другому профилю пользователей, это не очень хорошая идея. Читайте, что я предложил в PS. Кроме того, вместо true в * postsToShowToUser * вы можете указать идентификатор пользователя пользователя проводки. После того, как у вас есть postID и userID сообщения. Теперь вы можете перемещаться по сообщениям postID в разделе * post * базы данных, без предоставления доступа пользователю к учетной записи других пользователей. Я соответствующим образом обновил свой ответ. – Dravidian

+0

Что касается добавления почтового идентификатора в каждом повторителе, ваш пользователь может просто сделать сообщение, а затем вам придется прокручивать все users_Follwers, а затем через свой postID, откуда вы сможете получить postDetails из всех последних сообщений. Это неплохая идея, но вы дадите разрешение случайному последователю, чтобы получить доступ к вашим личным данным других пользователей, а также потребуется много времени, чтобы загрузить все детали и выполнить цикл, пользователи вашего приложения, возможно, не захотят так долго ждать прочитайте сообщение, сделанное их друзьями ...! – Dravidian

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