【问题标题】:Retrieve data from firebase in objective c从目标 c 中的 firebase 检索数据
【发布时间】:2016-10-02 07:02:43
【问题描述】:

我正在尝试从 firebase 检索数据,并且我正在使用 firebase 提供的指南,但我无法使用我的 firebase 数据库创建引用。

FIRDatabaseReference * ref = [[FIRDatabase alloc]
    referenceFromURL:@"https://project-8326407164650950213.firebaseio.com"];
NSLog(@"%@",ref);

我正在使用此代码通过我的数据库创建引用,但应用程序崩溃。

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** setObjectForKey: key cannot be nil”

我是 iOS 新手,第一次使用 firebase。请根据 Firebase 指南告诉我解决方案。

【问题讨论】:

    标签: ios objective-c firebase firebase-realtime-database


    【解决方案1】:

    我不是 firebase 专家,但是当你在 Obj-C 中使用一个类时,你要么调用它的类方法(例如 [FIRDatabase database]),要么首先分配并初始化它(@ 987654324@),其次在实例上使用实例方法。

    在您上面的代码示例中,我看到了一个没有初始化程序的分配器,这让我觉得您遗漏了一些东西。

    如果我查看 iOS quick start,我会看到对 initWithURL 的调用,它是初始化程序之一。

    【讨论】:

    • 您能解释一下您在 obj-c 中重新编写数据库所做的工作
    • 看起来 API 又变了:firebase.google.com/docs/reference/ios/firebasedatabase/… 现在看起来你需要类似的东西: FIRApp *app = [FIRApp configure]; [FIRDatabase databaseForApp:app]; (抱歉,我无法在评论中格式化代码 - 如果您想要更好的答案,请提出问题,而不是对相关松散的问题发表评论。;))
    【解决方案2】:
        Firebase *messagePath = [[Firebase alloc] initWithUrl:[NSString stringWithFormat:@"%@%@%@", MAIN_URL,MESSAGES_DIRECTORY,conversationId]];
    [[messagePath queryLimitedToLast:10] observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
        NSMutableArray *messages = [[NSMutableArray alloc] init];
        [messages addObject:snapshot.value];
        observingBlock(true,messages);
    }];
    
    • 这里是你可以得到节点的数据和值的代码。首先制作 url 直到你的节点。
    • 仍有任何问题,只需在此处添加评论即可。现在可以在 swift 中使用 Firebase 聊天。

    【讨论】:

    • 嗨,firebase 类现在无法访问,因为如他们的文档中所述,它已被弃用。 “您正在查看旧版文档。它们已于 2016 年 5 月 18 日被弃用。这些文档适用于 Objective-C SDK 的 2.5.1 及以下版本。请转到我们当前的文档,或查看我们的 iOS 迁移指南。”
    • @salmancs43 我已经与 FIRDATABASE 聊天,并在 swift 最新版本中使用 FIRAUTH 验证用户。我知道这是旧版本。
    • 我正在尝试检索数据,但我的代码没有进入完成块。我只想从 firebase 检索数据。无需用户身份验证或保存数据
    • 你能看看那个链接吗?我用完整的代码和数据库结构发布了我的问题。 stackoverflow.com/questions/37611505/…
    • @salmancs43 我已经在您在 cmets 中提供给我的链接上写了一个答案,请检查一下。
    【解决方案3】:

    您可以轻松完成。如果你想使用它来获取所有信息,你可以这样做。确保您已公开您的数据库,然后不需要身份验证

    @property (strong, nonatomic) FIRDatabaseReference *ref;
    

    然后在接口上定义属性

     self.ref = [[FIRDatabase database] reference];
         [self.ref observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
                NSDictionary *usersDict = snapshot.value;
    
                NSLog(@"Information : %@",usersDict);
            }];
    

    如果你想使用这个来获取特定的部分,你可以这样做

     [[self.ref child:@"results"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
    
            NSDictionary *usersDict = snapshot.value;
    
            NSLog(@"Info : %@",usersDict);
    
    
    
        }];
    

    我从 Firebase 获取的 Json

    {
       "results" : [
          {
    "name":"test 1",
    "URL" : "URL STRING"
          },
    {
    "name":"test 1",
    "URL" : "URL STRING"
          },
    {
    "name":"test 1",
    "URL" : "URL STRING"
          },
    {
    "name":"test 1",
    "URL" : "URL STRING"
          }
     ]
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多