将对象保存到 Firebase

Saving Objects to Firebase

第一次开发 Firebase 应用。我明白它不允许你保存实际的 Objective C object.I 明白一切都保存在 JSON 树中,它可以是 NSStrings、NSNumbers、NSArrays、NSDictionaries。实际上,您必须深入到每个 属性 才能获得实际值。前任。

假设您有 myObject => Firebase 不喜欢它。您必须通过获取 属性 来设置值。前任。 myObject.name (这将是一个字符串)。如果你的对象有很多属性,这会很烦人。

我了解到您可以实施 NSCoding 使其更优雅一些。我以前从未这样做过。我有以下用户对象。

#import <Foundation/Foundation.h>

@interface User : NSObject <NSCoding>


@property (nonatomic, copy) NSString *username;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *currentCity;

@end

#import "User.h"

@implementation User
    @dynamic username;
    @dynamic name;
    @dynamic currentCity;

-(void)encodeWithCoder:(NSCoder *)encoder{

    [encoder encodeObject:self.username forKey:@"username"];
    [encoder encodeObject:self.name forKey:@"name"];
    [encoder encodeObject:self.currentCity forKey:@"currentCity"];


}

-(id)initWithCoder:(NSCoder *)decoder{

    if (self = [super init]) {
        self.username = [decoder decodeObjectForKey:@"username"];
        self.name = [decoder decodeObjectForKey:@"name"];
        self.currentCity = [decoder decodeObjectForKey:@"currentCity"];

    }

    return self;
}

所以当保存到存储在 Firebase 中的用户对象时,我们是否只在保存到 Firebase 时对对象进行编码?

我对如何保存甚至检索它有点困惑。 Parse 更直接,但对于这个应用程序,我需要使用 firebase。

非常感谢你们如何处理这个问题的任何帮助或示例。

谢谢!

这并没有直接回答问题,而是提供了一个简单的选项。

将 firebase 节点视为具有名称,然后是一组 key/value 属性。类似于 ObjC 中的对象。

为了让它变得超级简单,只需为您的 ObjC 对象提供一些智能来处理从 Firebase 读取的字典,并在 ObjC 对象更改时同样更新 firebase 子节点。

例如;读入单个 firebase 节点(带有子节点 'properties')作为 FDataSnapshot。 (假设我们只读取一个节点而不是多个节点)。快照有一个 .value 属性,它是 key/value 对的字典。所以这是它在 Firebase 中的样子:

user_id_0
   userName: "dude"
   name: "Joe Smith"
   currentCity: "Miami"

您的用户对象将是一个具有三个相同属性的对象;用户名、姓名和当前城市。 (重要的是匹配这个例子中的名字)

当您初始化 User 对象时,只需将 FDataSnapshot (ss) 中的字典传递给它,它就会根据这些键填充自身。像这样

    NSDictionary *dict = ss.value;

    User *aUser = [User new];
    [aUser initWithDict:dict];

并且在User对象的initWithDict方法中

for ( id key in dict ) {
  id value = dict[key];
  [self setValue:value forKey:key];
}

上面遍历了 Firebase 字典中的每个 key/value 对,然后填充用户对象中的匹配属性。这也使得 User 对象非常灵活;当您将新的子值 (属性) 添加到 firebase 中的节点(如 favoriteFood)时,它可以简单地作为具有相同名称的 属性 添加到用户对象。

如果您不想将这些名称联系在一起,只需使用 Firebase 名称中的一些 if..then 即可填充用户对象。

同样,在更新 User 对象的 属性 时,使用 User 对象中的方法来更新 firebase 中的子节点。提示:您还应该将 Firebase 节点名称存储在 User 对象中,以便它知道要更新哪个节点。

有 100 种其他方法可以使用此功能,但此选项确实简化了将数据移入和移出 Firebase。