gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:21:16 25 4
gpt4 key购买 nike

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

#import <Foundation/Foundation.h>

@interface Story: NSObject

@property(nonanatomic, strong) NSString *title;

@end

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

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

@interface StoryStorage : RLMObject

@property NSString *title;

@end

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

然后我通过 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 中显示的更好方法?

最佳答案

我理解您希望将存储机制与模型类和 UI 分开的愿望,但您需要将 Realm 视为不仅仅是存储机制。它确实是直接与您的 UI 接口(interface)的模型类。例如,它的通知系统非常适合直接与 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/

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