将对象保存到 Firebase
Saving Objects to Firebase
第一次开发 Firebase 应用。我明白它不允许你保存实际的 Objective C object.I 明白一切都保存在 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。
非常感谢你们如何处理这个问题的任何帮助或示例。
谢谢!
这并没有直接回答问题,而是提供了一个简单的选项。
将 firebase 节点视为具有名称,然后是一组 key/value 属性。类似于 ObjC 中的对象。
为了让它变得超级简单,只需为您的 ObjC 对象提供一些智能来处理从 Firebase 读取的字典,并在 ObjC 对象更改时同样更新 firebase 子节点。
例如;读入单个 firebase 节点(带有子节点 'properties')作为 FDataSnapshot。 (假设我们只读取一个节点而不是多个节点)。快照有一个 .value 属性,它是 key/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 字典中的每个 key/value 对,然后填充用户对象中的匹配属性。这也使得 User 对象非常灵活;当您将新的子值 (属性) 添加到 firebase 中的节点(如 favoriteFood)时,它可以简单地作为具有相同名称的 属性 添加到用户对象。
如果您不想将这些名称联系在一起,只需使用 Firebase 名称中的一些 if..then 即可填充用户对象。
同样,在更新 User 对象的 属性 时,使用 User 对象中的方法来更新 firebase 中的子节点。提示:您还应该将 Firebase 节点名称存储在 User 对象中,以便它知道要更新哪个节点。
有 100 种其他方法可以使用此功能,但此选项确实简化了将数据移入和移出 Firebase。
第一次开发 Firebase 应用。我明白它不允许你保存实际的 Objective C object.I 明白一切都保存在 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。
非常感谢你们如何处理这个问题的任何帮助或示例。
谢谢!
这并没有直接回答问题,而是提供了一个简单的选项。
将 firebase 节点视为具有名称,然后是一组 key/value 属性。类似于 ObjC 中的对象。
为了让它变得超级简单,只需为您的 ObjC 对象提供一些智能来处理从 Firebase 读取的字典,并在 ObjC 对象更改时同样更新 firebase 子节点。
例如;读入单个 firebase 节点(带有子节点 'properties')作为 FDataSnapshot。 (假设我们只读取一个节点而不是多个节点)。快照有一个 .value 属性,它是 key/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 字典中的每个 key/value 对,然后填充用户对象中的匹配属性。这也使得 User 对象非常灵活;当您将新的子值 (属性) 添加到 firebase 中的节点(如 favoriteFood)时,它可以简单地作为具有相同名称的 属性 添加到用户对象。
如果您不想将这些名称联系在一起,只需使用 Firebase 名称中的一些 if..then 即可填充用户对象。
同样,在更新 User 对象的 属性 时,使用 User 对象中的方法来更新 firebase 中的子节点。提示:您还应该将 Firebase 节点名称存储在 User 对象中,以便它知道要更新哪个节点。
有 100 种其他方法可以使用此功能,但此选项确实简化了将数据移入和移出 Firebase。