2016-12-08 2 views
0

내 중포 기지 데이터베이스의 모든 사용자를 가져 오는있는 tableView이 일치하는 경우에만 사용자 데이터를 가져옵니다. tableView 셀은 단순히 사용자 이름, 전자 메일 및 프로필 이미지를 표시합니다. 문제는 나는 또한 그들이 응용 프로그램에서 선택한 속성의 배열을 개최 키는 사용자 노드에서의 UID에서 저장된 속성을 가지고있는 사용자 (이 예제의 속성이 될 것입니다 원하는이다 "음식", "음료 ","스포츠 "])와 나는 단지 3 또는 사용자 로그인 현재와 같은 속성을 더 가지고있는 사용자를 표시합니다.는 현재 사용자의 데이터

첫번째 문제는 내 UID 아래 firebase 데이터베이스에 속성 배열을 추가하는 방법을 모르겠다. 속성 노드로 색인 0에서 색인 2 (3 개의 키 0 , 1,2)를 "food", "drink", "sports"라는 문자열로 대체합니다. 이것이 가장 좋은 방법인지에 대해서도 나는 모른다. 어떤 도움을 주시면 감사하겠습니다.

두 번째 문제

내가 새 사용자를 가져오고 해당 사용자가 현재 사용자와 동일한 속성이있는 경우 내있는 tableView에 추가하는 방법을 모른다는 것이다.

func fetchUser() { 
     FIRDatabase.database().reference().child("users").observe(.childAdded, with: { (snapshot) in 

      if let dictionary = snapshot.value as? [String: AnyObject] { 
       let user = User() 

       user.setValuesForKeys(dictionary) 

       self.users.append(user) 



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

     }, withCancel: nil) 
    } 

class User: NSObject { 

    var name: String? 
    var email: String? 
    var numberId: String? 

    var attributes: String? 

    var password: String? 
    var profileImageUrl: String? 
} 

답변

1

첫째 : 여기에 어떤 필터링없이 모든 사용자, 를 가져 내 현재 코드입니다. 배열을 사용하지 마십시오. 그것들은 매우 상황이 좋으며 일반적으로 데이터를 저장하는 다른 방법이 있습니다. 첫 번째 질문에

답변 :

는 사용자 데이터 및 일부 속성을 저장하려는 중포 기지 구조를 감안할 때, 여기에 그것을

users 
    uid_0 
    name: "Frank" 
    attribs 
     fav_food: "Pizza" 
     fav_car: "Camaro" 

을 할 것이며, 위의 노드를 읽는 하나의 구조입니다

두 번째 질문에
usersRef.observe(.value, with: { snapshot in 

    for child in (snapshot?.children)! { 
     let snap = child as! FDataSnapshot 
     let dict = snap.value as! [String: AnyObject] 

     let name = dict["name"] //it's Frank 

     let attribs = dict["attribs"] as! [String: AnyObject] 
     let food = attribs["fav_food"] //pizza 
     let car = attribs["fav_car"] //camaro 
    } 
} 

답변 :

두 번째 문제는 새 사용자를 가져 오는 방법을 모르며 사용자가 현재 사용자와 동일한 속성을 가진 경우에만 내 테이블에 추가하는 것입니다.

그래서 당신이 무엇을 요구 현재 사용자와 동일한 attribs가 다른 사용자를 찾는 방법입니다 : 여기에 어떤 필터링없이 모든 사용자, 를 가져 내 현재 코드입니다.

중포 기지 여러 아이들에 따라 비교를 수행 할 수있는 능력이없는 (즉, 어떤이 : 어디 음식 == 피자와 차 = 카마로).

하나의 옵션은

pizza_Camaro 

후 쉽게 attribs '문자열이 동일한 경우를 확인할 수 있습니다 문자열로 attribs를 저장하는 것입니다.

또 다른 옵션은 재귀 쿼리입니다. 10k 피트 수준의 아이디어가 여기

query for all users where fav_food is pizza 
    query from that set of users where fav_car is Camaro 
     query from that set of users where.... 

아이디어가 있습니다. 그것은 효율적이지는 않지만 작은 데이터 세트의 경우 효과적입니다.

관련 문제