将对象保存到Firebase

时间:2015-09-02 10:22:52

标签: ios objective-c object firebase

首次使用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 个答案:

答案 0 :(得分:3)

这并不直接回答问题,但提供了一个简单的选项。

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

为了使它非常简单,只需给你的ObjC对象一些智能来处理从Firebase读入的字典,并在ObjC对象发生变化时同样更新firebase子节点。

例如;将一个firebase节点(带有子属性&#39;)作为FDataSnapshot读入。 (假设我们只读取一个节点而不是它们的数量)。快照具有.value属性,该属性是键/值对的字典。所以这就是它在Firebase中的外观:

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

您的User对象将是一个具有三个相同属性的对象; userName,name和currentCity。 (对于匹配此示例中的名称很重要)

初始化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名称中使用一些名称即可填充用户对象。

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

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