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

ios - 将 NSObject 转换为 RLMObject 以将其保存到 Realm 数据库

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

因为我想从我的主模型中获得一个单独的 RLMObject 我创建了两个独立的模型:

#import <Foundation/Foundation.h>

@interface Story: NSObject

@property(nonanatomic, strong) NSString *title;

@end

还有另一种将故事对象保存到 Realm 数据库的模型:

#import "RLMObject.h"
#import <Realm/Realm.h>

@interface StoryStorage : RLMObject

@property NSString *title;

@end

在 MainController 中,我从服务器获取故事并将它们添加到 Story 对象数组中。

然后我通过 indexPath.row 将一个故事对象传递给 DetailController 并在那里显示它的数据。 我还可以选择将该对象添加到 Realm 数据库。

为此,我创建了一个函数:

-(void)addToDatabaseStory: (StoryStorage *)story {
        [self.realm beginWriteTransaction];
        [self.realm addObject:story];
        [self.realm commitWriteTransaction];
}

当编译器到达时

[self.realm addObject:story];

它会抛出一个错误:

    *** Terminating app due to uncaught exception
 'NSInvalidArgumentException', reason: '-[Story isInvalidated]:
 unrecognized selector sent to instance 0x60400028eb00'

您能否给我一个建议,如何在 RealmDatabase 中添加和删除对象? 当我从 Realm 中删除该对象时,当我只有一个对象作为 RLMObject 时,它会引发错误“对象已被删除并失效”。

从 RealmDatabase 中删除对象但仍将其保留在模型中以便在 UI 中显示的更好方法是什么?



Best Answer-推荐答案


我理解您希望将存储机制从模型类和 UI 中分离出来,但您需要将 Realm 视为不仅仅是存储机制。它确实是直接与您的 UI 交互的模型类。例如,它的通知系统非常适合直接与 UITableViewController 的插入/删除/更改行进行交互。

因此,随着您对 Realm 的深入了解,您很快就会后悔尝试将其归为应用的存储端。让它用于你应用的模型类,或者至少是那些需要持久性的!您尝试进行的所有转换都将导致 1) 获取大量不需要获取的 Realm 对象(减慢您的应用程序和/或浪费大量内存),以及 2) 您会风起云涌最多不利用 Realm 的通知系统和 3) 大量额外的代码和复杂性(因此也可能有很多错误)。

至于您的具体问题,您没有展示如何将 Story 转换为 StoryStorage,但是您这样做肯定是错误的,因为当您调用 Realm 的 addObject 时,它永远不能提示故事对象。它应该对 Story 对象一无所知(根据错误“Story isInvalidated]”)。 Story 对象的标题应该已经映射到 StoryStorage 对象的标题,以后不会调用任何关于 Story 的内容。

无论如何,这没有实际意义,因为我认为您在尝试使 Realm 对象与非 Realm 对象保持同步时走错了路。 (如果你打算为你的许多模型做这件事,你不妨切换到 CoreData,因为你会使用很少的 Realm 提供的东西——你最终将不得不用很多来弥补它自定义代码)。希望这会有所帮助!

关于ios - 将 NSObject 转换为 RLMObject 以将其保存到 Realm 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49312683/

回复

使用道具 举报

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

本版积分规则

关注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