• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 境界- cocoa : How to add notification inside other notification block

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:19:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在我的应用中,我注册了一个通知 block ,它本身必须注册另一个通知 block 。

notificationToken = [self.appState.currentProject addNotificationBlock:^(BOOL deleted, NSArray<RLMPropertyChange *> *changes, NSError *error) {
if (deleted) {
    NSLog(@"The object was deleted.");
} else if (error) {
    NSLog(@"An error occurred: %@", error);
} else {
    bool filterChanged = false;
    for (RLMPropertyChange * change in changes){
        if([change.name isEqualToString"filters"])
            filterChanged = true;
    }
    if(filterChanged){
        // compute predicate from filters
        // predicate = [NSPredicate ...
        styles = [Style objectsWithPredicate:predicate]
        notificationTokenStyles = [styles addNotificationBlock:^(RLMResults<Style *> * _Nullable results, RLMCollectionChange * _Nullable change, NSError * _Nullable error) {
            // react on changed styles.
        }]; // <- RLMException here
    }
}];
}
}];

我知道这在技术上是不可能的,但对我来说这是必要的。我可以以某种方式将嵌套的 addNotificationBlock 分派(dispatch)或推迟到另一个线程左右吗?我知道我可以等待 500 毫秒,但这会导致竞争条件。

现在,我的问题是,当我执行导致第一个通知 block 执行的写入事务时,我遇到 RLMException: Cannot register notification blocks from within write transactions. 就在嵌套的 addNotificationBlock。

提前致谢!



Best Answer-推荐答案


这是一个已知问题(参见 this Realm issue on GitHub)。

您可以像这样(Swift 代码)包装新 NotificationToken 的创建:

DispatchQueue.main.async {
    // register observation blocks here
}

或者你可以在开始写事务之前调用realm.refresh()

关于ios - 境界- cocoa : How to add notification inside other notification block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47339378/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap