ios - 将 NSObject 转换为 RLMObject 以将其保存到 Realm 数据库
<p><p>因为我想从我的主模型中获得一个单独的 RLMObject
我创建了两个独立的模型:</p>
<pre><code>#import <Foundation/Foundation.h>
@interface Story: NSObject
@property(nonanatomic, strong) NSString *title;
@end
</code></pre>
<p>还有另一种将故事对象保存到 Realm 数据库的模型:</p>
<pre><code>#import "RLMObject.h"
#import <Realm/Realm.h>
@interface StoryStorage : RLMObject
@property NSString *title;
@end
</code></pre>
<p>在 MainController 中,我从服务器获取故事并将它们添加到 Story 对象数组中。 </p>
<p>然后我通过 indexPath.row 将一个故事对象传递给 DetailController 并在那里显示它的数据。
我还可以选择将该对象添加到 Realm 数据库。 </p>
<p>为此,我创建了一个函数:</p>
<pre><code>-(void)addToDatabaseStory: (StoryStorage *)story {
;
;
;
}
</code></pre>
<p>当编译器到达时</p>
<pre><code>;
</code></pre>
<p>它会抛出一个错误:</p>
<pre><code> *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '-:
unrecognized selector sent to instance 0x60400028eb00'
</code></pre>
<p>您能否给我一个建议,如何在 RealmDatabase 中添加和删除对象?
当我从 Realm 中删除该对象时,当我只有一个对象作为 RLMObject 时,它会引发错误“对象已被删除并失效”。</p>
<p>从 RealmDatabase 中删除对象但仍将其保留在模型中以便在 UI 中显示的更好方法是什么?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我理解您希望将存储机制从模型类和 UI 中分离出来,但您需要将 Realm 视为不仅仅是存储机制。它确实是直接与您的 UI 交互的模型类。例如,它的通知系统非常适合直接与 UITableViewController 的插入/删除/更改行进行交互。 </p>
<p>因此,随着您对 Realm 的深入了解,您很快就会后悔尝试将其归为应用的存储端。让它<em></em>用于你应用的模型类,或者至少是那些需要持久性的!您尝试进行的所有转换都将导致 1) 获取大量不需要获取的 Realm 对象(减慢您的应用程序和/或浪费大量内存),以及 2) 您会风起云涌最多不利用 Realm 的通知系统和 3) 大量额外的代码和复杂性(因此也可能有很多错误)。</p>
<p>至于您的具体问题,您没有展示如何将 Story 转换为 StoryStorage,但是您这样做肯定是错误的,因为当您调用 Realm 的 addObject 时,它永远不能提示故事对象。它应该对 Story 对象一无所知(根据错误“Story isInvalidated]”)。 Story 对象的标题应该已经映射到 StoryStorage 对象的标题,以后不会调用任何关于 Story 的内容。</p>
<p>无论如何,这没有实际意义,因为我认为您在尝试使 Realm 对象与非 Realm 对象保持同步时走错了路。 (如果你打算为你的许多模型做这件事,你不妨切换到 CoreData,因为你会使用很少的 Realm 提供的东西——你最终将不得不用很多来弥补它自定义代码)。希望这会有所帮助!</p></p>
<p style="font-size: 20px;">关于ios - 将 NSObject 转换为 RLMObject 以将其保存到 Realm 数据库,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/49312683/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/49312683/
</a>
</p>
页:
[1]