2017-03-03 14 views
0

私はチャットルームのアプリを作っています。今のチャット投稿はすべて、投稿したユーザーだけが見ることができます。どのように私はテーブルビューを永久にし、すべてのユーザーが現在のユーザーだけでなく、見ることができます。ライブフィードのように。シミュレータとiOSデバイスtableView Firebase

Exaple私はすべてのデバイスに表示するために必要なものだけではなく、テストデバイス:

1

import UIKit 
import Foundation 
import Firebase 
import FirebaseDatabase 
import FirebaseStorage 

struct postStruct { 
    let username : String! 
    let message : String! 
    let photoURL : String! 
} 

class GeneralChatroom: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate { 

    @IBOutlet weak var messageTextField: UITextField! 

    var generalRoomDataArr = [postStruct]() 

    @IBOutlet weak var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.rowHeight = UITableViewAutomaticDimension 
     tableView.estimatedRowHeight = 140 



     let ref = FIRDatabase.database().reference() 
     let userID = FIRAuth.auth()?.currentUser?.uid 




     ref.child("general_room").child("chat").child(userID!).queryOrderedByKey().observe(.childAdded, with: {snapshot in 

      let snapDict = snapshot.value as? NSDictionary 
      let username = snapDict?["Username"] as? String ?? "" 
      let message = snapDict?["Message"] as? String ?? "" 
      let firebaseUserPhotoURL = snapDict?["photo_url"] as? String ?? "" 

      self.generalRoomDataArr.insert(postStruct(username: username, message: message, photoURL: firebaseUserPhotoURL), at: 0) 
      self.tableView.reloadData() 

     }) 

    } 



    @IBAction func backButtonPressed(_ sender: UIButton) { 
     self.performSegue(withIdentifier: "BackToRoom", sender: nil) 
    } 










    //Message Send button is pressed data uploaded to firebase 
    @IBAction func sendButtonPressed(_ sender: UIButton) { 

     let message : String = self.messageTextField.text! 

     UploadGeneralChatRoom(message: message) //upload to general_room 

     self.messageTextField.text = nil 
     messageTextField.resignFirstResponder()//Quit keyboard 
     self.tableView.reloadData() //Reload tableView 
     //UploadUserData() //Update Rank in database 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return generalRoomDataArr.count // your number of cell here 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "cell") 



     let usernameLabel = cell?.viewWithTag(1) as! UILabel 
     usernameLabel.text = generalRoomDataArr[indexPath.row].username 

     let messageLabel = cell?.viewWithTag(2) as! UILabel 
     messageLabel.numberOfLines=0 // line wrap 
     messageLabel.lineBreakMode = NSLineBreakMode.byWordWrapping 
     messageLabel.text = generalRoomDataArr[indexPath.row].message 



     //initialize UI Profile Image 
     let imageView = cell?.viewWithTag(3) as! UIImageView 

     //Make Porfile Image Cirlce 
     imageView.layer.cornerRadius = imageView.frame.size.width/2 
     imageView.clipsToBounds = true 

     //User Profile image in tableview 
     if generalRoomDataArr[indexPath.row].photoURL != nil 
     { 
      //let imageView = cell?.viewWithTag(3) as! UIImageView 

      if let url = NSURL(string: generalRoomDataArr[indexPath.row].photoURL) { 

       if let data = NSData(contentsOf: url as URL) { 

        imageView.image = UIImage(data: data as Data) 
       } 
      } 
     } 







     // your cell coding 
     return cell! 
    } 


}//END CLASS 
+0

シミュレータは通知を受信できません。 2つの実際のデバイスでアプリをテストしてください。 – Adeel

+0

SocketまたはRESTを使用していますか? – chengsam

+0

多分私はより良いexplinationが必要です。私はメッセージを送信し、それはどのように私はそれをpermenantly保つことがUITableViewに投稿します。誰かがチャットルームに投稿したときに消えてしまうことはありません。 – nil

答えて

0

このコードを試してみてください - 迅速な

でのObj-C

[[[self.reference child:@"general_room"] child:@"chat"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { 

    if (snapshot.value != (id)[NSNull null]) { 

     NSArray *value = [snapshot.value allValues]; 

     NSLog(@"%@", [value valueForKey:@"Username"]); 
     NSLog(@"%@", [value valueForKey:@"Message"]); 
     NSLog(@"%@", [value valueForKey:@"photo_url"]); 
    } 

} withCancelBlock:^(NSError * _Nonnull error) { 
    NSLog(@"%@", error.localizedDescription); 
}]; 

シンタックスを確認すると、構文がわからない

ref.child("general_room").child("chat").observeSingleEvent(of: .value, with: { (snapshot) in 

    let value = snapshot.value as? NSArray 

    for (dict in value) { 
    let username = dict?["Username"] as? String 
    let message = dict?["Message"] as? String 
    let photo_url = dict?["photo_url"] as? String 

     print(username) 
     print(message) 
     print(photo_url) 

    } 
    }) { (error) in 
     print(error.localizedDescription) 
    }} 
関連する問題