因为我想从我的主模型中获得一个单独的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中,我从服务器获取故事并将它们添加到Story对象数组中。
然后我通过indexPath.row将一个故事对象传递给DetailController并在那里显示它的数据。 我也可以选择将该对象添加到Realm Database。
为此,我创建了一个函数:
-(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时,它会抛出一个错误&#34;该对象被删除并失效&#34;。
仅从RealmDatabase删除对象的更好方法是什么,但仍然将其保留在模型中以便在UI中显示?
答案 0 :(得分:2)
我理解您希望将存储机制与模型类和UI分开,但您需要将Realm视为不仅仅是存储机制。它真正意味着是直接与UI连接的模型类。例如,它的通知系统非常适合直接与UITableViewController的插入/删除/更改行进行交互。
因此,当您深入了解Realm时,您会很快后悔尝试将其降级到应用程序的存储端。让它 用于你的应用程序的模型类,或至少那些需要持久性的模型类!您尝试进行的所有转换将导致1)获取许多不需要获取的领域对象(减慢您的应用程序和/或浪费大量内存),以及2)您将风不利用Realm的通知系统和3)大量的额外代码和复杂性(因此也可能存在很多错误)。
至于你的具体问题,你没有展示你是如何将Story转换为StoryStorage的,但是你做的那样肯定是错的,因为当你调用领域的addObject时,它永远不能抱怨故事对象。它应该对Story对象一无所知(根据错误“Story isInvalidated”)。 Story对象的标题应该已经被映射到StoryStorage对象的标题,其方式是稍后不会调用Story。
无论如何,这是没有意义的,因为我认为你正试图让Realm对象与非Realm对象保持同步。 (如果你要为你的许多模型做到这一点,你也可以切换到CoreData,因为你很少使用Realm提供的东西 - 你最终将不得不用很多东西弥补它自定义代码)。希望这有帮助!