我需要一个list<Object>使用Realm.我试过RealmList<RealmObject>但它不起作用,因为它RealmObject是抽象的.
我是iOS和Swift世界的新手,我正在开发一个新的应用程序,我想使用Realm进行持久化.我的代码中已经有实体,我的服务访问并填充了HTTP API端点.
现在我想坚持某些实体,并想知道我是否应该为我的每个实体创建新的Realm特定模型来从Realm读取和写入.或者我应该将所有现有的普通Swift实体转换为Realm实体.起初这感觉不对,因为我会在我的应用程序中传递Realm Entities,而不仅仅是在持久层中.
但是,另一种方法是,每次我向Realm读/写实体时,我都需要将它们从实体转换为Realm实体.
有关最佳方法的任何建议吗?
谢谢
我怎样才能在里面声明一个整数数组RLMObject?
喜欢 :
dynamic var key:[Int]?
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
Terminating app due to uncaught exception 'RLMException', reason: ''NSArray' is not supported as an RLMObject property. All properties must be primitives, NSString, NSDate, NSData, RLMArray, or subclasses of RLMObject. See https://realm.io/docs/objc/latest/api/Classes/RLMObject.html for more information.'
Run Code Online (Sandbox Code Playgroud) 虽然这个问题可能看起来完全基于意见,但它可以作为未来开发人员的一个很好的资源.(即我现在知道Firebase在查询数据库方面受到严重限制,但已经浪费了宝贵的时间将其添加到我的项目中......)
我的应用目前用于从Firebase服务器Firebase下载JSON数据,解析并填充数据的位置UITableView.然后,用户可以在本地与数据交互,不会将任何内容发送回服务器.
到目前为止一切正常但我发现查询数据库是一个痛苦,我不得不在本地使用Core Data....
我最近偶然发现Realm并且根据我的理解,它似乎为服务器和本地数据库提供了解决方案.从您见过的边缘案例中使用它会有任何缺点吗?遇到任何问题?
我最近在网上找不到任何东西,所以Stack似乎是最好的地方.
有没有一种从Realm数据库中删除旧数据的简单方法?如果某个对象有一天存储自动删除它?
替代方法可以是添加带有日期的字段并提取并比较它以确定是否删除,但问题是Realm是否有自己的方法来实现此目的.
我已经看到了一些类似的问题(比如这个),但是对于Android (或Java)没有,在Realm docs中我发现的唯一类似的方法是关于迁移.
问题是是否有任何其他方法可以自动从Realm中删除旧对象,例如我们存储数据,参数,配置或Realm方法时的条件,而不仅仅是每次比较.很明显,通过查询,我们可以消除任何我们想要的对象.
链接问题(不是答案)的说明只是为了澄清这不是基于Swift的问题,并且乍一看并没有将其标记为重复.
我有一个包含~30个字段的领域对象,在添加和删除多个对象后,似乎领域占用了相当多的空间.分配空间的大小似乎呈指数级增长:
10*(加100 +全部删除)= 4 mb数据
15*(加100 +全部删除)= 33 mb数据
20*(加100 +全部删除)= 91 mb数据
25*(加100 +全部删除)= 179 mb数据

此时,data\data\app_folder\files\default.realm中的文件本身为200 MB.
现在这个严重的问题可能是因为我没有做正确的事情.在我每次插入之前
Realm realm = Realm.getInstance(context);
realm.beginTransaction();
realm.where(RealmSubmission.class).findAll().clear();
// if i use realm.allObjects(RealmSubmission.class).clear(); the leak is even bigger, i get to 170mb Data with 20*(add 100 + remove all) even though both calls do the same by looking at their semantics.
realm.commitTransaction();
Run Code Online (Sandbox Code Playgroud)
将项添加到领域中如下所示:
for (Submission submission : submissionList){
realm.beginTransaction();
RealmSubmission realmSubmission = realm.createObject(RealmSubmission.class);
RealmObjectUtils.copySubmission(realmSubmission, submission);
realm.commitTransaction();
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在实现一个应用程序,它使用Realm在某些点(它们之间不相关)持久化数据.例如:
(让我们将这些点中的每一个命名为模块/包)
每个模块/包都有一些RealmObjects要坚持.我该如何组织这个?从代码清洁,性能或我应该关心的任何事情的角度来看
选项A:使用具有唯一模式的唯一(默认)领域:
使用 Realm.getInstance(context)
访问RealmObjects每个模块/包中的正确
选项B:使用具有默认架构的多个域
RealmConfiguration在每个模块中使用的域中指定不同的名称(使用默认架构).
由于数据属于应用程序的不同部分,隔离且未互连,因此请为每个模块使用不同的域名.
选项C:使用多个领域和范围每个应用程序包使用模式的模型类 为每个隔离的包指定名称和模式.例如:
public static Realm getChat(Context context){
RealmConfiguration config = new RealmConfiguration.Builder(context)
.name("chat.realm")
.schemaVersion(1)
.setModules(new ChatRealmModule())
.build();
return Realm.getInstance(config);
}
// Create the module
@RealmModule(classes = { ChatRoom.class, ChatMessage.class, ChatUser.class})
public static class ChatRealmModule{
}
Run Code Online (Sandbox Code Playgroud)
选项D:其他?
我想在用户按下注销按钮时清除整个数据库,并在另一个用户登录时加载新数据.我尝试了许多解决方案,如
try {
Realm.deleteRealm(realmConfiguration);
} catch (Exception ex){
throw ex;
}
Run Code Online (Sandbox Code Playgroud)
也
try {
Realm.deleteRealmFile(getActivity());
//Realm file has been deleted.
} catch (Exception ex){
ex.printStackTrace();
//No Realm file to remove.
}
Run Code Online (Sandbox Code Playgroud)
但这两个代码都不起作用.提前致谢.
我有一个Realm对象,它有几个关系,任何人都有一个很好的代码片段,可以概括一个复制方法,在数据库中创建一个副本.