菜鸟教程小白 发表于 2022-12-13 04:03:07

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


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

<pre><code>#import &lt;Foundation/Foundation.h&gt;

@interface Story: NSObject

@property(nonanatomic, strong) NSString *title;

@end
</code></pre>

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

<pre><code>#import &#34;RLMObject.h&#34;
#import &lt;Realm/Realm.h&gt;

@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
&#39;NSInvalidArgumentException&#39;, reason: &#39;-:
unrecognized selector sent to instance 0x60400028eb00&#39;
</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]
查看完整版本: ios - 将 NSObject 转换为 RLMObject 以将其保存到 Realm 数据库