ios - 将对象保存到Firebase

标签 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中时对对象进行编码?

我对如何保存甚至检索它有些困惑。解析要简单得多,但是对于这个应用程序,我需要用户使用firebase。

任何帮助或示例如何处理你们将不胜感激。

谢谢!

最佳答案

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

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

要使其变得 super 简单,只需为您的ObjC对象提供一些智能,以处理从Firebase读取的字典,并同样在ObjC对象更改时更新firebase子节点。

例如;读取单个Firebase节点(带有子级“属性”)作为FDataSnapshot。 (假设我们仅读取一个节点而不是其中的多个节点)。快照具有.value属性,该属性是键/值对的字典。因此,这是在Firebase中的外观:

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

您的User对象将是具有三个相同属性的对象。用户名,名称和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名称上的if.then来填充User对象。

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

具有此功能的其他100种方法,但是此选项确实简化了将数据移入或移出Firebase的过程。

关于ios - 将对象保存到Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32350600/

相关文章:

ios - 如何从容器 View 接收信息

ios - “计数”不能用于类型 'ViewController'

ios - 从 IBAction 获取对 UITableViewCell 的引用?

ios - 带有动画和 UIImageView 的浮星效果

iphone - 捕获视频时在开始时检测相机旋转

javascript - 循环输入值并将它们按一定顺序放入对象内

javascript - JS检查对象数组是否包含对象

android - Flutter AppUpdateService 链接到死亡

iphone - 在uitableview中显示使用相同的 friend 列表

c++ - 直接在类外调用构造函数会隐式创建对象吗?