2017-07-30 5 views
0

ユーザーの配列を単一の文字列にアンパックします。NSArraysを文字列に展開する

たとえば、私のアプリではグループチャットがあり、ユーザーがグループチャットに入るたびに、そのユーザーのuidがメンバーのリストに追加されます。私は単一のグループチャットのすべてのメンバーをapp内の文字列として返したいと思います。

Iデータベースから各部屋を取得する場合、次のデータ・オブジェクトの下

class Room: NSObject { 

    var owner: String? 
    var groupChatName: String? 
    var groupChatDescription: String? 
    var members: [NSArray]? 

} 

であるように、各部屋にはコードで表されています。

func fetchAllRooms(){ 
    Database.database().reference().child("rooms").observe(.childAdded, with: {(snapshot) in 

     if let dictionary = snapshot.value as? [String: AnyObject] { 
      let room = Room() 
      room.setValuesForKeys(dictionary) 

      self.rooms.append(room) 
      print(snapshot) 

      print(room.members?.joined()) 
      print(self.rooms.count) 

      DispatchQueue.main.async(execute: { 
       self.collectionView?.reloadData() 
      }) 
     } 

     print("end of snap") 

    }, withCancel: nil) 
} 

print(room.members?.joined()) は現在、アプリがクラッシュし、 'NSInvalidArgumentException'、理由スローです:

を ' - [__ NSDictionaryI objectAtIndex:]:認識されていないセレクタはインスタンス0x60800146ab80に送信された'

Iデータがどのように構造化されているか分かりますので、こちらをご覧ください。

"A632CA68-40D9-4F3A-B8C8-245457057443" : { 
    "groupChatDescription" : "Test Description", 
    "groupChatName" : "Test Name", 
    "members" : { 
    "WuqCAt4mM3h0P0X1m7hVZ7NQyLC2" : { 
     "username" : "Steve" 
    } 
    }, 
    "owner" : "Steve" 
}, 

すべての回答、提案、および/または参照は非常に高く評価されます。

答えて

0

あなたのクラスに辞書を設定しているようです。ですからまず、辞書から値を抽出し、ルームモデルのクラスプロパティに設定する必要があります。その後、配列のjoinメソッドを呼び出そうとするとうまくいくはずです。

+0

値をダウンロードした後に辞書に値を追加することは可能ですか?私は通常、彼らはアプリがクラッシュすると一致しない場合は知っている。 – Stefan

+0

辞書から、そのキーの値にアクセスできます。その値をModelクラスのプロパティの中に設定します。それは理にかなっていますか? –

関連する問題