小编Roc*_*ith的帖子

在Swift中使用带有Realm的deleteRealmIfMigrationNeeded时崩溃

我正在做以下内容didFinishLaunchingWithOptions:

let config = Realm.Configuration(
  schemaVersion: 0,
  deleteRealmIfMigrationNeeded: true
)
Realm.Configuration.defaultConfiguration = config

let realm = try! Realm()
Run Code Online (Sandbox Code Playgroud)

基本上,在开发时,我不想担心迁移,只是想在架构发生变化时清除数据库.我的理解是,这正是deleteRealmIfMigrationNeeded为了什么.

问题是,有时它在尝试初始化Realm时崩溃并出现以下错误:

致命错误:'试试!' 表达式意外地引发了错误:错误Domain = io.realm Code = 5"path at path'/ Users/rock/Library/Developer/CoreSimulator/Devices/D626848E-14D5-47AC-8FFB-9B67D024DEF1/data/Containers/Data/Application /6F71103C-9E10-4131-BED4-D96445FABA52/Documents/default.realm'不存在."

default.realm文件被删除了,大概是因为deleteRealmIfMigrationNeeded,但是在用最后一行初始化Realm时没有重新创建(正如我所期望的那样).

有趣的是,如果我手动删除default.realm.lock然后重新启动应用程序,它将工作.

我做错了吗?这可能是个错误吗?(我正在使用Realm Swift 2.4.1)

realm swift

5
推荐指数
1
解决办法
1517
查看次数

将领域与Amazon DynamoDB结合使用

我的应用程序是脱机优先的,因此Realm对于持久化和访问数据非常有用。我喜欢它。但是,我也想将用户数据存储在云中(用于备份,也可以在以后添加Web支持的情况下使用)。我知道这正是Realm Object Server的目的,但我认为出于以下原因,我更愿意使用DynamoDB:

1)我已经投资了DynamoDB和Amazon的身份验证(Cognito)。

2)我喜欢Realm实际上是一个关系数据库,因为我确实需要从客户端运行复杂的查询。但是,在后端,我主要只是想备份所有数据,以便可以轻松地访问它并根据需要通过Lambda函数进行操作)。我对NoSQL解决方案完全满意,我的理解是DynamoDB是具有横向扩展能力的经济高效的数据库,这吸引了我。如果我想通过Realm Object Server以这种方式访问​​数据,我的理解是每月至少需要花费1,500。

3)对Realm团队没有冒犯,但Parse关闭让我很头疼,所以我想使用一些我可以信任的东西作为我的后端,它将持续5年以上。

无论如何,这是我目前正在做的工作:

1)每当我创建或编辑Realm对象时,我就有逻辑将更改映射到我的DynamoDB模式中(该结构由比Realm少得多的表组成)。

2)我将这些更新称为“更新” UpdateTasks,然后将它们排队并根据需要进行合并(例如,如果您多次更改同一属性)。

3)我穿过队列,将的大块代码传递UpdateTasks给我编写的Lambda函数,该函数将迭代更新并对DynamoDB执行必要的put或update命令。

4)如果您离线或请求失败,我会设置重试逻辑

5)假设如果您有新手机并登录,一切都将正确同步,那么我有一个单独的Lambda函数,该函数将像以前一样提取用户的所有数据并填充Realm文件。

就像我说的那样,所有这些现在都在起作用,但是感觉很脆弱,我忍不住觉得自己走错路了。另外,如果我想添加一些社交功能,它不支持双向同步或实时通信

所以我的问题是,这是否是使Realm与DynamoDB同步的合理方法,还是有更好/更可靠的方法?另外,如果我应该重新考虑使用Realm Object Server或其他方式而不是DynamoDB,我也想听听为什么。

对我来说,这是一个重大决定,因此,我将不胜感激!谢谢

realm amazon-dynamodb swift aws-lambda realm-object-server

5
推荐指数
1
解决办法
741
查看次数