Swift Firebase以更智能的方式检索数据?

时间:2016-09-12 08:23:55

标签: ios swift firebase firebase-realtime-database

我有一个显示用户帖子的UITableView。该帖子包含post-imagepost-descriptionpost-owner-uidpost-owner usernamepost-owner profile picture。当用户上传帖子时,它会将这5个对象保存到Firebase帖子节点。

let Post = Post(description: description, imgUrl: imgUrl, postOwnerUID: postOwnerUID, postOwnerName: postOwnerName, postOwnerImg: postOwnerImg)

然后,应用程序检索它并将其显示在tableCell上。但是,我想问一下,保存Post节点中的所有数据(甚至用户数据)或从User节点检索用户数据的最佳做法是什么使用postOwnerUID用户uid )?如果是这样我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果在显示帖子时,您始终需要用户的名称,那么在Post节点中保留用户名称可能是有意义的。但是,您需要为每个帖子维护用户的名称。通过引用用户的uid,您只需在一个位置更新用户。

{
    "posts": {
        "p1": {
            "owner": { "u1": true },
            "description": "...",
            "imgUrl": "http://..."
        }
    },
    "user-posts": {
        "u1": {
            "p1": true
        }
    }
    "users": {
        "u1": {
            "name": "John",
            "imgUrl": "http://..."
        }
    }
}

您可以通过单独的请求获取您的帖子并检索其所有者。

let ref = FIRDatabase.database().referenceWithPath('posts')

ref.observeEventType(.ChildAdded, withBlock: { snapshot in

    guard let json = snapshot.value as? [String:AnyObject] else { return }

    let post = Post(...)

    let uid = snapshot.childSnapshotForPath("owner").key
    let ref = FIRDatabase.database().referenceWithPath('users/\(uid)')

    ref.observeSingleEventOfType(.Value, withBlock: { snapshot in

        let owner = Owner(...)

        post.owner = owner
    })
})

您还应该查看FirebaseUI-iOS,使用Firebase数据填充表格非常简单https://github.com/firebase/FirebaseUI-iOS