对于同一新对象多次调用 Firebase FEventTypeChildAdded 回调

2024-01-01

我正在开发一个 iOS 应用程序,并且我在 Firebase 的登录演示应用程序之上构建了我的项目。我可以通过 Facebook 进行身份验证,并与 Firebase 进行良好的通信。当我按下注销按钮时,运行的代码如下:

- (void)logoutButtonPressed
{
     // logout of Firebase and set the current user to nil
     [self.simpleLogin logout];
     [self.ref unauth]; //Added this
     [self updateUIAndSetCurrentUser:nil];
     [self.items removeAllObjects];
     [self.tableView reloadData];
}

它似乎成功了。一切都会重置,我的 tableView 也被清除。当我重新登录时,我会获取与我的 FB 凭据关联的数据,并且它会填充,一切都很好。我有一个 textField 和一个按钮,当我按下按钮时,textField 的文本将保存到 firebase 并在本地更新。

问题当我在注销一次后尝试在简单的字符串列表中创建一个新条目时,就会出现这种情况。当我重新登录并尝试保存条目时,它会保存到 firebase 一次(这是正确的),但我的回调被调用两次!

[ref observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
            // Add the chat message to the array.
            if (![snapshot.value isEqual:[NSNull null]]) {
                [self.items addObject:snapshot.value[@"text"]];
            }

            // Reload the table view so the new message will show up.
            [self.tableView reloadData];
        } withCancelBlock:^(NSError *error) {
            NSLog(@"%@", error.description);
        }];

相同的对象快照在此块中出现两次,这意味着相同的对象被添加到数组和我的 tableView 中两次。如果我注销并再次登录,情况会变得更加奇怪。第三次,出现了三份副本。第四次,四个项目,等等。这是我按下添加按钮时的代码:

- (IBAction)submitButtonPressed {
    if ([self.currentUser.provider isEqualToString:@"facebook"]) {
    Firebase *postRef = [[[self.ref childByAppendingPath:@"users"] childByAppendingPath:self.currentUser.uid] childByAppendingPath:@"posts"];

    NSString *statusText = [NSString stringWithFormat:@"Logged in as %@ (Facebook)",
                  self.currentUser.providerData[@"displayName"]];

    [[postRef childByAutoId] setValue:@{@"name" : statusText, @"text": self.textField.text}];
    }
}

看来我可能没有完全退出 Firebase 或 FB,但我不知道还能尝试什么。

什么会导致 FEventTypeChildAdded 回调针对同一个新对象被多次调用?


我从未使用过 Firebase iOS SDK,但它的工作方式很可能与其他 SDK 类似。

如果是这种情况,您注册的侦听器块将在用户注销时保持注册状态。然后,当用户再次登录时,您将注册第二个事件侦听器。因此,从那一刻起,您的代码块将为每个添加的子级执行两次。

当用户注销时,您应该取消注册/取消事件侦听器(https://www.firebase.com/docs/ios/api/#firebase_removeAllObservers https://www.firebase.com/docs/ios/api/#firebase_removeAllObservers)或者如果您之前已经注册过它们,则不再重新注册它们。

请参阅适用于 iOS 的 Firebase 指南,特别是有关分离块的部分:https://www.firebase.com/docs/ios/guide/retrieve-data.html#section-detaching https://www.firebase.com/docs/ios/guide/retrieving-data.html#section-detaching

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于同一新对象多次调用 Firebase FEventTypeChildAdded 回调 的相关文章

  • 将用户重定向到 iTunes 应用商店或 Google Play 商店?

    我正在寻找一种简单的解决方案来发布我的应用程序的一个链接 例如在 Facebook 上 如果用户使用移动设备访问它 它应该自动重定向到正确的应用程序商店 否则 用户应该被重定向到我的网站 iOS应用程序 http itunes apple
  • 如何在 SKAction 中途反转精灵所遵循的路径方向?

    我有一个 SKSpriteNode 它使用 SKAction 沿着圆形路径移动 create the path our sprite will travel along let circlePath CGPathCreateWithElli
  • Firebase 中的递归错误太多

    我的全局作用域中有一个函数 用于侦听 FB 引用上的值 function updateCredits userID var userRef database ref users userID userRef on value functio
  • iOS 新手。预期的表达错误?

    这看起来很不寻常 因为该方法与我的 showAnswer 方法完全相同 所以我想我应该在这里问 import QuizViewController h interface QuizViewController end implementat
  • firestore是否支持事务中的集合级锁定?

    我曾在 mongodb 中工作 它不是 sql 数据库 它仅支持文档级锁 由于firestore也不是sql数据库 它支持文档级锁还是允许集合级锁 唯一的锁定操作是文档锁定交易 https firebase google com docs
  • 即席分发失败

    我在一家大公司工作 正在开发一个适用于 iOS 5 的 iOS 应用程序 分发应用程序的唯一方式是通过临时部署 我拥有自己的服务器已经有一段时间了 由 o2switch 法国托管商 托管 当我开始开发时 我们使用它来部署应用程序以进行 Be
  • 如何在 iPhone 应用程序的 url 中传递字符串值

    NSURLRequest request NSURLRequest requestWithURL NSURL URLWithString http www krsconnect no community api html method ba
  • just_audio 无法在 ios flutter 上工作未处理的异常:(-11800)操作无法完成

    我正在尝试从它自己的存储库运行 just audio 示例项目https github com ryanheise just audio tree master just audio example https github com rya
  • 让约束在尺寸类别中发挥作用

    所以 我正在 Xcode 6 beta 中尝试尺寸类 我对图像设置了一些限制 使其根据 iPhone 纵向和横向对应的尺寸类别处于不同的位置 这些限制在下图中可见 正如您所看到的 当我处于紧凑 紧凑状态时 一些约束被 安装 而其他约束则没有
  • Firebase Cloud Messaging 是否需要身份验证?

    我有一个带有自定义用户身份验证的 php 服务器 我正在尝试与 Firebase 创建聊天 在阅读文档后 我仍然很困惑 我需要为 Firebase 验证我的用户 如果是这样 我应该使用 signInWithCustomToken 来完成吗
  • 使用捏合手势;如何放大用户手指实际“捏”的位置?

    我已经在我的应用程序中的 UIImageView 上实现了 UIPinchGestureRecognizer 但是无论我在图像的哪个位置捏合 它似乎都会放大到同一个位置 有谁知道我如何让它放大到用户实际 捏 的地方 请参阅下面的代码 视图控
  • StoryBoard 2 导航控制器指向相同的视图

    有谁知道为什么这不起作用 这样 只有一个选项卡栏加载视图 另一个选项卡栏则显示黑屏 我在没有导航控制器的情况下尝试过 选项卡栏是正确的 而另一个在运行模式下不显示选项卡栏项目 如果有人感兴趣的话我对这个问题的回答 添加两个视图来启动我们感兴
  • 在 iPhone 和 Cocos2d 中从类类型(+)方法访问对象?

    我有一个类方法 在其中创建并返回类对象 但我想访问同一类中该对象的某些属性 作为一个类方法 我无法在 h 文件中声明该变量 然后在其他方法中访问它 以下是代码 我如何在下面的实例方法中访问 backsprite 或 hudlayer 对象的
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • Facebook 登录 Apple CNA

    问题 是否可以设置 Facebook 登录以在 CNA 中使用 是否为开发人员提供 CNA 文档 您可以使用任何开发人员工具调试 CNA 屏幕吗 Details 我创建了一个使用电子邮件提交表单或 Facebook 登录按钮的强制门户登录页
  • 为什么 iOS 5.0 不喜欢纯窗口应用程序?为什么它要求使用视图控制器?

    我有一个使用 Xcode 4 0 的 基于窗口的应用程序 模板创建的 iOS 应用程序 当时运行良好 并且使用的是 iOS 4 3 SDK 这是一个简单地将按钮 标签等直接放置到窗口上的应用程序 没有视图控制器 什么都没有 但现在我已经升级
  • 使用 Facebook Marketing API 创建广告素材

    我正在尝试创建一个带有 URL 标签的链接到外部登录页面的广告素材 这营销API文档 https developers facebook com docs marketing api validation v2 12 creative提供以
  • AVAudioMixerNode pan 或 AVAudioUnitSamplerstereoPan 属性无法更改 AVAudioEngine 声音输出的左/右平衡

    我有以下代码 它播放单个 MIDI 音符 但我希望能够调整平衡 平移 以便它仅从左扬声器或右扬声器或某些组合中播放 我认为更改 sampler stereoPan 或 engine mainMixerNode pan 也许可以解决问题 但它
  • 在应用程序内启用或禁用 Iphone 推送通知

    我有一个 iPhone 应用程序 可以接收推送通知 目前 我可以通过转到 iPhone 设置 通知来禁用我的应用程序的推送通知 但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知 这是可以做到的 因为我在 foursquare i
  • 桌面上的 AVAudioSession?

    在 mac 桌面上 我试图录制系统声音 以及可选的麦克风声音 但一开始我只是录制系统声音 我正在遵循本指南 https www appcoda com ios avfoundation framework tutorial https ww

随机推荐

  • 如何在 ASP.NET MVC 中禁用客户端和代理缓存?

    在 ASP NET MVC 中禁用页面缓存的正确 与浏览器无关 方法是什么 尝试这个 OutputCache NoStore true Duration 0 VaryByParam public ActionResult NonCachea
  • Python:Groupby 第一个非 NaN 值

    我有以下数据框 id number 1 13 1 13 1 NaN 1 NaN 2 11 2 11 2 11 2 NaN 我想找到每个 id 的第一个非 NaN 值并用 1 标记它 结果应如下所示 id number code 1 13 N
  • 如何在D3中点击添加或拖动?

    我的印象是这个问题太简单了 没有人费心去制作它的演示 但我对 D3 的了解还不够多 无法看出我做错了什么 我正在寻找的行为是 如果用户单击没有圆圈的地方 它将在那里创建一个圆圈 如果他们拖动现有的圆圈 则不会创建新的圆圈 但他们拖动的圆圈将
  • Firebase - 创建临时用户直到用户注册

    我有一个用例 用户 A 可以说用户 B 从用户 A 借了一些钱 类似于 Splitwise 等应用程序 我正在使用 firestore 来存储数据 在这种特殊情况下 我将其作为文档存储在 Transactions 集合中 该集合将具有以下字
  • CEdit::GetLine() Windows 7

    我有以下代码段 其中m edit是一个 CEdit 控件 TCHAR lpsz MAX PATH 1 get the edit box text m edit GetLine 0 lpsz MAX PATH 这在运行 Windows XP
  • 在 C# 中使用原始套接字

    我想用 C 编写一个端口扫描器 但无法使用 SocketType Raw 因为原始套接字是从 Windows 桌面版本中取出的 我无法使用 SharpPcap 或 Winpcap 的其他包装器 因为我使用 PPPoE 进行互联网连接 而 W
  • 检查奇数时 & 比 % 更快吗?

    要检查奇数和偶数 最低位检查是否比使用模数更有效 gt gt gt def isodd num return num 1 and True or False gt gt gt isodd 10 False gt gt gt isodd 9
  • MySQL 有命名约定吗?

    我是这样做的 表名是小写的 使用下划线分隔单词 并且是单数 例如foo foo bar etc 我通常 并非总是 有一个自动增量 PK 我使用以下约定 tablename id e g foo id foo bar id etc 当表包含作
  • xmlHttpRequest.onerror 处理程序用例

    什么样的情况会导致调用此处理程序 我没有找到此方法引发错误的任何实例 我尝试让设备离线 我得到xmlHttpRequest status 0但没有错误 问题是我可以创建什么样的情况来测试此处理程序的功能 var xmlhttp new XM
  • C++/CLI 中的文字字段与常量变量

    我正在阅读一些 C CLI 材料 并且遇到了文字字段的概念 literal int inchesPerFoot 12 这比 const 更好吗 因为 constFIELD不能存在 因为字段无法初始化自身 所以 class aClass pr
  • 如何通过 Azure DevOps 在 Dockerfile 中设置环境变量

    在我的项目 Docker 文件中 我有一些环境变量 如下所示 ENV ACCEPT EULA Y ENV SA PASSWORD Password ENV MSSQL PID Developer ENV MSSQL TCP PORT 143
  • 在应用程序域之间来回传递集合对象

    以下示例基于 在应用程序域之间来回传递值 https stackoverflow com questions 1250774 passing values back and forth appdomains 其中 Marc Gravell
  • 扩展运算符类似物

    我有一个结构体和该结构体的实例 type Obj struct ssid string code string mit string and other props 23 var ValidObject Obj ssid AK93 KADJ
  • Android 应用程序连接到网络服务 - 不工作

    我正在尝试将我的应用程序连接到我在 asp net 中创建的 WCF 服务 该服务在我的本地计算机上运行 http localhost 8080 Service svc http localhost 8080 Service svc 但由于
  • 批量归一化 - Tensorflow

    我看过一些 BN 的例子 但还是有点困惑 所以我目前正在使用这个函数 它调用这里的函数 https github com tensorflow tensorflow blob master tensorflow g3doc api docs
  • 解压 sys.argv 时 Pylint 误报

    我有一个解压脚本sys argv到一个函数中 像这样 import sys def do something a b It doesn t matter what this function does print a b if name m
  • WPF 链绑定

    我想创建一个像这样的链绑定 我有一个用户控件 在具有类似依赖属性的窗口内具有依赖属性 我想将用户控件的依赖属性绑定到窗口的依赖属性 我创建了一个示例项目来演示我的问题 用户控件1 XAML
  • 打印到终端末尾

    Like this picture of apt get how can I print something at the end of the line just like the speed on the screen Although
  • 是否可以将 Google 服务帐户限制为项目内的特定 BigQuery 数据集?

    我已使用 GCP UI 为特定项目设置了一个服务帐号Project X 之内Project X有3个数据集 Dataset 1 Dataset 2 Dataset 3 如果我分配角色BigQuery Admin to Project X目前
  • 对于同一新对象多次调用 Firebase FEventTypeChildAdded 回调

    我正在开发一个 iOS 应用程序 并且我在 Firebase 的登录演示应用程序之上构建了我的项目 我可以通过 Facebook 进行身份验证 并与 Firebase 进行良好的通信 当我按下注销按钮时 运行的代码如下 void logou