我是Realm for Android的新手,所以我不确定我是以正确的方式接近这个.我有一个看起来像这样的课:
public class Entry extends RealmObject implements Parcelable {
...
}
Run Code Online (Sandbox Code Playgroud)
问题是Parcelable接口包含类似的方法,describeContents() writeToParcel()并且RealmObjects不应该有除getter和setter之外的方法:
Error:(81, 17) error: Only getters and setters should be defined in model classes
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:我如何让这两个一起工作?有没有比创建一个单独的类(可能是类似的RealmEntry)更好的方法?这样做会导致大量重复的代码......
试图使用新的realm-swift-0.92.3,我无法让这个"运行脚本阶段"工作.我按照这里的说明操作.
根据说明我的Run-Script条目是(见下图):

不幸的是,我在尝试编译时仍然收到以下错误消息(见下文).什么可能仍然是错的???
bash:/Users/XXX/Library/Developer/Xcode/DerivedData/MyAppglnkfueqyjbdhurfurfkip/Build/Products/Debug-iphonesimulator/MyApp.app/Frameworks/RealmSwift.framework/strip-frameworks.sh:没有这样的文件或目录
My Framework-Search-Paths也设置如下:/Users/XXX /.../MyApp/Frameworks/RealmSwift.framework/Frameworks
我很感激任何帮助!
我有一个Message/RLMObject具有NSString *jabberID属性/行的模型,我想检索unique该行内的每个值.
换句话说,我想jabberID从我的Message模型中检索非重复值.任何人都可以帮忙解决这个问题吗?
我使用coredata的方式是使用returnsDistinctResults设置NSFetchRequest.
我最近创建了一个新的分支,并试图重构很多我的代码给Realm了一枪CoreData.但到目前为止,我还没有运气得到我的代码.
首先,在shared_realm.cpp中抛出异常.抛出错误的代码行是:
if (realm->config().schema_version != config.schema_version && config.schema_version != ObjectStore::NotVersioned) {
throw MismatchedConfigException("Realm at path already opened with different schema version.");
}
Run Code Online (Sandbox Code Playgroud)
如果我跳过此异常,它将捕获以下代码中的第二行代码:
class func getAllCategories() -> Results<Category> {
let realm = try! Realm()
let categories = realm.objects(Category)
return categories
}
Run Code Online (Sandbox Code Playgroud)
并抛出此错误消息:
致命错误:'试试!' 表达式意外地引发了一个错误:错误Domain = io.realm Code = 1"已使用不同架构版本打开的路径中的域".UserInfo = {NSLocalizedDescription =已使用不同架构版本打开的路径中的域.错误代码= 1}
我对Realm是全新的,所以任何帮助都表示赞赏.我从文档中了解到Realm(),这是访问默认数据库的正确方法,这对我目前的用途来说很好.起初我认为也许必须传递一个领域,但我从在线示例中看到,情况似乎并非如此.
我已经清理,更改了模拟器,甚至更新了Xcode.我还尝试将这行代码注释回来:
// FIXME - enable schema comparison
/*if (realm->config().schema != config.schema) {
throw MismatchedConfigException("Realm at path already opened with different …Run Code Online (Sandbox Code Playgroud) 每当我运行异步事务时,我都有理解关闭Realm实例的好习惯.
在我的应用程序中,我有很多控制器,我没有从活动中传入Realm实例,而是每次需要时都会创建一个新的控制器,并在工作完成后立即关闭它.
但是最近我发现它无法正常工作,如果我在运行异步事务时关闭领域实例.
Realm cacheRealm = RealmDelegate.getCacheRealm();
cacheRealm.executeTransaction(realm -> {
doSomeWork(response);
realm.copyToRealmOrUpdate(response);
}, callback);
cacheRealm.close();
Run Code Online (Sandbox Code Playgroud)
上面的代码有一个大问题,即回调永远不会启动,因为我在事务完成之前关闭了realm实例.
因此,我不确定我应该如何处理这种情况.我是否应该将Realm对象的实例从活动或片段传递到每个控制器,并仅在那里处理关闭领域实例?或者也许还有其他更优雅的解决方案来解决这个问题?
另外我想知道的是,如果我不关闭Realm数据库会发生什么,有没有办法检查Realm的所有实例是否已经关闭?
当我尝试从我的Realm中获取一个对象时,我偶然发现了一个奇怪的事情(iOS,Swift,Realm版本0.98.2)
print("speaker:")
print(RealmProvider.appRealm.objects(FavoriteSpeaker).first!)
Run Code Online (Sandbox Code Playgroud)
正确地将我的对象转储到控制台中:
speaker:
FavoriteSpeaker {
name = Ashley Nelson-Hornstein;
}
Run Code Online (Sandbox Code Playgroud)
但是当我试图获得该name物业的价值时:
print("speaker name:")
print(RealmProvider.appRealm.objects(FavoriteSpeaker).first!.name)
Run Code Online (Sandbox Code Playgroud)
我得到一个空字符串
speaker name:
Run Code Online (Sandbox Code Playgroud)
这四条线在我的模型init方法中是一起的
更新1:我找到了一个答案,表明您在控制台中打印时只看不到值:Realm对象缺少除primaryKey之外的所有属性,但我也尝试name通过警报视图显示该属性,这也是空的.
更新2:只是为了确保一切顺序发生并且在同一个线程上我做了这个:
let favorite1 = FavoriteSpeaker()
favorite1.name = "Debbie Downer"
try! RealmProvider.appRealm.write {
RealmProvider.appRealm.deleteAll()
RealmProvider.appRealm.add(favorite1)
}
print("speaker:")
print(RealmProvider.appRealm.objects(FavoriteSpeaker.self).first!)
print("speaker name:")
print(RealmProvider.appRealm.objects(FavoriteSpeaker.self).first!.name)
Run Code Online (Sandbox Code Playgroud)
但结果是一样的 - 打印name打印一个空字符串
当使用SQLite时,我通常每个应用程序都有一个SQLiteOpenHelper实例,我永远不会关闭它,因为它的数据库被许多其他类连续使用,关闭/重新打开它会更慢,更复杂.
现在我正在玩Realm,我打算只从Data Access Objects访问Realm实例.每次调用都将来自一个工作线程.
我一直在阅读这些示例,他们通常会根据每个Activity或后台任务调用getInstance/close.由于Realm将数据保存在像SQLite这样的文件中,为每个操作调用getInstance/close是个好主意吗?我的意思是,调用close实际上会关闭文件连接,从而使下一个getInstance调用更慢?我应该在应用程序级别缓存Realm实例并将其注入到DAO中吗?
我是ios开发的新手.
我按照这个迁移示例来使用预先填充的数据库并稍微更改代码
这是我使用的最终代码 AppDelegate -> func application
let defaultPath = Realm.Configuration.defaultConfiguration.path!
let path = NSBundle.mainBundle().pathForResource("default", ofType: "realm")
if let bundledPath = path {
print("use pre-populated database")
do {
try NSFileManager.defaultManager().removeItemAtPath(defaultPath)
try NSFileManager.defaultManager().copyItemAtPath(bundledPath, toPath: defaultPath)
} catch {
print("remove")
print(error)
}
}
Run Code Online (Sandbox Code Playgroud)
我正在一个真实的设备中测试它.
它可以工作,但根据代码逻辑,它将始终重置为预先填充的数据库.这已经过验证:应用程序重启后数据会重置.
我试过moveItemAtPath而不是copyItemAtPath.权限错误
我试图在复制后删除预先填充的数据库文件.权限错误
我尝试使用预先填充的数据库文件作为域默认配置路径.也发生了错误.
我目前正在我的应用程序中使用Realm,为了确保我正确管理Realm实例,我在我的基本Activity中引入了一个如下变量:
protected val realm: Realm by lazy {
Realm.getDefaultInstance()
}
Run Code Online (Sandbox Code Playgroud)
然后在onDestroy中我这样做:
override fun onDestroy() {
super.onDestroy()
realm.close()
}
Run Code Online (Sandbox Code Playgroud)
然后我意识到这是一种浪费.如果当前活动不使用领域,它将打开并立即关闭onDestroy.
所以我更新到这个:
private var usedRealm = false
protected val realm: Realm by lazy {
usedRealm = true
Realm.getDefaultInstance()
}
override fun onDestroy() {
super.onDestroy()
if (usedRealm) {
realm.close()
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法完成同样的事情,没有额外的旗帜?
Hy我正在研究使用Realm和Alamofire的应用程序.我很高兴在我的iOS项目中使用这些库.
但后来我必须发布一个包含多个模型列表的模型列表.所以这是太深的东西,我的意思是List里面的List包含模型,那些模型包含几个模型的列表
为了演示,我们举一个我的模型的例子
@objcMembers public class MyModel : Object{
dynamic var Id: String = ""
dynamic var Name: String = ""
dynamic var Favorites: List<String>? = nil
dynamic var Subjects: List<UserSubject>? = nil
}
@objcMembers public class UserSubject: Object{
dynamic var Id: String = ""
dynamic var Name: String = ""
dynamic var Teachers: List<Publications>? = nil
}
@objcMembers public class Publications: Object{
dynamic var Id: String = ""
dynamic var Name: String = ""
dynamic var Editors: List<Editors>? = …Run Code Online (Sandbox Code Playgroud) realm ×10
android ×4
ios ×4
swift ×4
java ×2
xcode ×2
alamofire ×1
asynchronous ×1
codable ×1
kotlin ×1
objective-c ×1
parcelable ×1
persistence ×1
sqlite ×1
swift4 ×1