将对象保存到 Firebase

Posted

技术标签:

【中文标题】将对象保存到 Firebase【英文标题】:Saving Objects to Firebase 【发布时间】:2015-09-02 10:22:52 【问题描述】:

第一次使用 Firebase 应用。我了解它不允许您保存实际的 Objective C 对象。我了解所有内容都保存在 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。

对于你们如何处理此问题的任何帮助或示例将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

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

将 firebase 节点视为具有名称和一组键/值属性。类似于 ObjC 中的 Object。

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

例如;作为 FDataSnapshot 读入单个 firebase 节点(带有子“属性”)。 (假设我们只读取一个节点而不是它们的数量)。快照有一个 .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 字典中的每个键/值对,然后在用户对象中填充匹配的属性。这也使得 User 对象非常灵活;就像当您向 firebase 中的节点(如 favoriteFood)添加新的子值(属性)时一样,它可以简单地作为同名属性添加到 User 对象中。

如果您不想将名称绑定在一起,只需使用 Firebase 名称上的一些 if..then 即可填充 User 对象。

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

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

【讨论】:

您好,Jay 感谢您的回复。所以基本上你所有的对象都应该指向 Firebase 上的特定节点?我能够登录并使用来自 firebase 的数据填充我的对象 - 它不像解析那么直观。 是的!每个对象(例如 User 对象)都会知道它在 Firebase 中的节点。随着对象的更新,它会自动知道更新它在 Firebase 中的相应节点。我建议不要直接比较 Parse 和 Firebase;它们是不同的平台,您存储数据(以及处理数据的方式)的方式也不同。

以上是关于将对象保存到 Firebase的主要内容,如果未能解决你的问题,请参考以下文章

如何将json对象数组保存到猫鼬?

如何将json对象数组保存到猫鼬?

将对象保存到 Firebase

将数据从 JSON 保存到对象

如何将可映射对象保存到 nsuserdefault?

将对象从数组保存到数据库[关闭]