gpt4 book ai didi

ios - 将对象保存到Firebase

转载 作者:行者123 更新时间:2023-12-01 18:49:28 24 4
gpt4 key购买 nike

首次使用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com