首次使用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。
任何有关您如何处理此问题的帮助或示例将不胜感激。
谢谢!
答案 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的过程。