iOS 10 'String' 领域崩溃
Realm crash on iOS 10 with 'String'
我最近发布了我们应用程序的新版本,在 Beta 测试期间,它在所有 iOS 10 台设备上崩溃,但在其他版本上没有。由于我们有 Crashlytics,我们在后端发现了一条奇怪的崩溃消息,我们可以确认这是所有 iOS 10 崩溃的原因,因为它是 100% iOS 10 并且有大约 40 个。
全文如下:
致命异常:RLMException
属性 Article.id 被声明为字符串,它不是受支持的托管对象 属性 类型。如果它不应该是托管 属性,请将其添加到 ignoredProperties()
或不要将其声明为 @objc dynamic
。有关详细信息,请参阅 https://realm.io/docs/swift/latest/api/Classes/Object.html。
这是对象:
class Article: Object {
@objc dynamic var id: String = UUID().uuidString
// others...
override static func primaryKey() -> String? {
return "id"
}
}
如您所见,这是完全正常的,在其他 iOS 上运行良好。在 Realm 的文档中,字面意思是将 String 与 @objc dynamic
一起使用,而且它不可能不受支持。我怀疑 Article.id
没有什么特别之处,因为 Article
以 A
开头,它恰好是所有领域对象的第一个字符串 属性。也许不知何故所有字符串在 iOS 10?
上停止工作
谁能提供一些建议或见解?(请不要说放弃 iOS 10 支持之类的话。现在,我们需要它。)
我们 运行 多次陷入同一个问题,试图将 Realm 完全拖入 Swift。这并不是真正的 答案,而是我们在需要向后兼容性时成功使用的解决方法。
它是一个 ObjC 对象,而不是 Swift。
桥接发生了一些事情,可能符合 NSCopy'ing 或类似的东西,所以只需将其更改为阅读
@objc dynamic var id = NSUUID().uuidString
请参阅 Models 部分中的入门指南,其中要求使用 NSUUID
NSUUID: An object representing a universally unique value that bridges
to UUID; use NSUUID when you need reference semantics or other
Foundation-specific behavior.
原来是 Realm 的 bug。我们碰巧有另一个应用程序在 iOS 10 上运行得很好,经过一些检查我们意识到它使用的是 Realm 4.3.2,而不是 4.4.1。我们将 Realm 降级到 4.3.2 后,这个问题就消失了。
我最近发布了我们应用程序的新版本,在 Beta 测试期间,它在所有 iOS 10 台设备上崩溃,但在其他版本上没有。由于我们有 Crashlytics,我们在后端发现了一条奇怪的崩溃消息,我们可以确认这是所有 iOS 10 崩溃的原因,因为它是 100% iOS 10 并且有大约 40 个。
全文如下:
致命异常:RLMException
属性 Article.id 被声明为字符串,它不是受支持的托管对象 属性 类型。如果它不应该是托管 属性,请将其添加到 ignoredProperties()
或不要将其声明为 @objc dynamic
。有关详细信息,请参阅 https://realm.io/docs/swift/latest/api/Classes/Object.html。
这是对象:
class Article: Object {
@objc dynamic var id: String = UUID().uuidString
// others...
override static func primaryKey() -> String? {
return "id"
}
}
如您所见,这是完全正常的,在其他 iOS 上运行良好。在 Realm 的文档中,字面意思是将 String 与 @objc dynamic
一起使用,而且它不可能不受支持。我怀疑 Article.id
没有什么特别之处,因为 Article
以 A
开头,它恰好是所有领域对象的第一个字符串 属性。也许不知何故所有字符串在 iOS 10?
谁能提供一些建议或见解?(请不要说放弃 iOS 10 支持之类的话。现在,我们需要它。)
我们 运行 多次陷入同一个问题,试图将 Realm 完全拖入 Swift。这并不是真正的 答案,而是我们在需要向后兼容性时成功使用的解决方法。
它是一个 ObjC 对象,而不是 Swift。
桥接发生了一些事情,可能符合 NSCopy'ing 或类似的东西,所以只需将其更改为阅读
@objc dynamic var id = NSUUID().uuidString
请参阅 Models 部分中的入门指南,其中要求使用 NSUUID
NSUUID: An object representing a universally unique value that bridges to UUID; use NSUUID when you need reference semantics or other Foundation-specific behavior.
原来是 Realm 的 bug。我们碰巧有另一个应用程序在 iOS 10 上运行得很好,经过一些检查我们意识到它使用的是 Realm 4.3.2,而不是 4.4.1。我们将 Realm 降级到 4.3.2 后,这个问题就消失了。