标签: realm

RealmObject和Parcelable

我是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)更好的方法?这样做会导致大量重复的代码......

java sqlite android realm parcelable

8
推荐指数
2
解决办法
7578
查看次数

Realm Swift 0.92.3"运行脚本阶段"无效

试图使用新的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

我很感激任何帮助!

xcode realm ios

8
推荐指数
3
解决办法
3969
查看次数

使用Realm查询返回唯一/不同的值

我有一个Message/RLMObject具有NSString *jabberID属性/行的模型,我想检索unique该行内的每个值.

换句话说,我想jabberID从我的Message模型中检索非重复值.任何人都可以帮忙解决这个问题吗?

我使用coredata的方式是使用returnsDistinctResults设置NSFetchRequest.

objective-c realm ios swift

8
推荐指数
2
解决办法
6178
查看次数

RealmSwift:已经使用不同架构版本打开的路径中的域

我最近创建了一个新的分支,并试图重构很多我的代码给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)

xcode realm ios swift

8
推荐指数
1
解决办法
1874
查看次数

领域 - 如何使用异步事务关闭领域实例

每当我运行异步事务时,我都有理解关闭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的所有实例是否已经关闭?

android asynchronous realm

8
推荐指数
1
解决办法
4924
查看次数

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打印一个空字符串

realm swift

8
推荐指数
1
解决办法
1903
查看次数

关闭并重新打开Realm实例对性能有害吗?

当使用SQLite时,我通常每个应用程序都有一个SQLiteOpenHelper实例,我永远不会关闭它,因为它的数据库被许多其他类连续使用,关闭/重新打开它会更慢,更复杂.

现在我正在玩Realm,我打算只从Data Access Objects访问Realm实例.每次调用都将来自一个工作线程.

我一直在阅读这些示例,他们通常会根据每个Activity或后台任务调用getInstance/close.由于Realm将数据保存在像SQLite这样的文件中,为每个操作调用getInstance/close是个好主意吗?我的意思是,调用close实际上会关闭文件连接,从而使下一个getInstance调用更慢?我应该在应用程序级别缓存Realm实例并将其注入到DAO中吗?

java android persistence realm

8
推荐指数
1
解决办法
4307
查看次数

Swift Realm,以正确的方式加载预先填充的数据库?

我是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 swift

8
推荐指数
2
解决办法
2080
查看次数

Kotlin懒惰的用法

我目前正在我的应用程序中使用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)

有没有办法完成同样的事情,没有额外的旗帜?

android realm kotlin

8
推荐指数
1
解决办法
1147
查看次数

如何在使用Realm时实现Codable

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 ios alamofire swift4 codable

8
推荐指数
2
解决办法
1043
查看次数