Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将对象保存到Firebase_Ios_Objective C_Object_Firebase - Fatal编程技术网

Ios 将对象保存到Firebase

Ios 将对象保存到Firebase,ios,objective-c,object,firebase,Ios,Objective C,Object,Firebase,第一次使用Firebase应用程序。我知道它不允许您保存实际的Objective C对象。我知道所有内容都保存在JSON树中,可以是NSString、NSNumber、NSArray和NSDictionary。实际上,您必须深入到每个属性才能获得实际值。前 假设您有myObject=>Firebase不喜欢它。您必须通过获取属性来设置值。例如,myObject.name(将是一个字符串)。如果你的对象有很多属性,这是非常恼人的 我知道您可以实现NSCoding,使其更加优雅。我以前从未这样做过。

第一次使用Firebase应用程序。我知道它不允许您保存实际的Objective C对象。我知道所有内容都保存在JSON树中,可以是NSString、NSNumber、NSArray和NSDictionary。实际上,您必须深入到每个属性才能获得实际值。前

假设您有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
因此,当保存到存储在Firebase中的用户对象时,我们是否只在保存到Firebase时对对象进行编码

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

任何关于你们如何处理这件事的帮助或例子都将不胜感激


谢谢你

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

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

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

比如,;作为FDataSnapshot读入单个firebase节点(具有子级属性)。(假设我们只读取一个节点,而不是它们的数量)。快照具有.value属性,该属性是键/值对的字典。下面是Firebase中的外观:

user_id_0
   userName: "dude"
   name: "Joe Smith"
   currentCity: "Miami"
您的用户对象将是具有三个相同属性的对象;用户名、姓名和当前城市。(匹配本例中的名称很重要)

初始化用户对象时,只需从FDataSnapshot(ss)将字典传递给它,它就会从这些键填充自己。像这样的

    NSDictionary *dict = ss.value;

    User *aUser = [User new];
    [aUser initWithDict:dict];
在用户对象的initWithDict方法中

for ( id key in dict ) {
  id value = dict[key];
  [self setValue:value forKey:key];
}
上面介绍了Firebase字典中的每个键/值对,然后在用户对象中填充匹配的属性。这也允许用户对象非常灵活;与将新的子值(属性)添加到firebase中的节点(如favoriteFood)时一样,只需将其作为同名属性添加到用户对象中即可

如果不想将名称绑定在一起,可以使用Firebase名称上的一些If..then来填充用户对象

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


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

嗨,Jay,感谢您的回复。所以基本上所有的对象都应该指向Firebase上的特定节点?我能够登录并用firebase的数据填充我的对象——这并不像解析那个样直观。是的!每个对象(例如用户对象)都知道它在Firebase中的节点。当对象被更新时,它将自动知道更新Firebase中对应的节点。我建议不要直接比较Parse和Firebase;它们是不同的平台,您存储(以及处理)数据的方式也不同。
for ( id key in dict ) {
  id value = dict[key];
  [self setValue:value forKey:key];
}