'NSError' 不支持作为 RLMObject 属性。所有属性都必须是原语

'NSError' is not supported as an RLMObject property. All properties must be primitives

我的应用程序崩溃了,并在控制台上向我返回了这个错误。我的构建工作正常,但是当我尝试 运行 单元测试时,我得到了这个。

'NSError' is not supported as an RLMObject property. All properties must be primitives, NSString, NSDate, NSData, RLMArray, or subclasses of RLMObject

这是我的模型的样子...

public class Place: Object {

// mongo id
public dynamic var _id: String = ""
// google id
public dynamic var google_id: String = ""
// name
public dynamic var name: String = ""
// score
public dynamic var score: Double = 0
// types
public let types = List<TypeObject>()
public dynamic var typeFormat: String = ""
// address
public dynamic var address: Address?
// geographic location
public dynamic var location: GeoJSON?
// phone
public dynamic var phone: Phone?
// open now
public dynamic var openNow: Bool = false
// hours
public let hours = List<Hours>()
// utc offset
public dynamic var utcOffset: Int = 0
// website
public dynamic var website: String = ""
// price level
public dynamic var priceLevel: Int = 0
// created at, updated at
public dynamic var createdAt: String = ""
public dynamic var updatedAt: String = ""
// visit
public let history = List<Visit>()
public dynamic var visitValue: VisitValue?
public dynamic var voteValue: VoteValue?
// reviews
public let reviews = List<Review>()
// photos
public let photos = List<Photo>()

...

模型 class 很大,所以我省略了初始值设定项。需要注意的一件事是,这个 class 不包含任何 NSError 类型,但包含函数、getter 和 setter,所有这些都不会抛出任何类型的错误。我不知道这是否会影响模型,但他们在这一点上都工作得很好。当我升级到 Swift 2 和 XCode 7 时,所有这些错误都开始发生。我在这里真的很困惑,任何帮助都会很棒。

更新 我的问题是我在优化代码时不小心在模型中的两个函数之间添加了一个 var error: NSError? 。我找不到它,因为我的模型包含辅助函数,但没有。因此,我希望这可以帮助 运行 遇到此问题的任何人,让他们不要理会模型,而是将与模式无关的任何代码放在模型本身之外。

你能加一个"Exception Breakpoint"吗?如果是这样,您可以根据在 RLMProperty.mm:

中传递给此方法的 name 变量,找出模型中的哪个 属性 导致了问题
initSwiftPropertyWithName:indexed:property:instance:

最终调用了 setTypeFromRawType,这是产生错误的地方。

我的猜测是它是对象关系属性之一,因为在评估您的模型并检查 属性 是否指向 Realm Object 的子类时会发生错误。