我是 Realm 的新手,我尝试保存一个带有数组的对象,但是我遇到了崩溃,在阅读错误后发现 Realm 不接受数组,所以我删除了数组,但我仍然得到一个每当我使用 Realm 时都会出错。这是一个出现错误的示例代码:
let realm = RealmService.shared.realm
print(realm.objects(Person))
这是完整的错误:
Terminating app due to uncaught exception 'RLMException', reason: 'Property 'person' is declared as 'NSArray', which is not a supported RLMObject property type. All properties must be primitives, NSString, NSDate, NSData, NSNumber, RLMArray, RLMLinkingObjects, or subclasses of RLMObject
这是 RealmService 类:
import Foundation
import RealmSwift
class RealmService{
private init(){}
static let shared = RealmService()
var realm = try! Realm()
func create<T: Object>(_ object: T){
do{
try realm.write {
realm.add(object)
}
}catch{
post(error)
}
}
func update<T: Object>(_ object: T, with dictionary: [String: Any?]){
do{
try realm.write {
for (key,value) in dictionary{
object.setValue(value, forKey: key)
}
}
}catch{
post(error)
}
}
func delete<T: Object>(_ object: T ){
do{
try realm.write {
realm.delete(object)
}
}catch{
post(error)
}
}
func post(_ error: Error){
NotificationCenter.default.post(name: NSNotification.Name("RealmError"), object: error)
}
func observeRealmErrors(in vc: UIViewController, completion: @escaping (Error?)-> Void){
NotificationCenter.default.addObserver(forName: NSNotification.Name("RealmError"), object: nil, queue: nil) { (notification) in
completion(notification.object as? Error)
}
}
func stopObserving(in vc: UIViewController){
NotificationCenter.default.removeObserver(vc, name: NSNotification.Name("RealmError"), object: nil)
}
}
更新:
人员类别:
import Foundation
import RealmSwift
class Person: Object{
@objc dynamic var name: String = ""
@objc dynamic var id: String = ""
@objc dynamic var phone: String = ""
@objc dynamic var country : String = ""
@objc dynamic var identifier: String = ""
@objc dynamic var gender : Int = 0
@objc dynamic var level: Int = 0
@objc dynamic var mena: Int = 0
@objc dynamic var moz: Int = 0
@objc dynamic var arafat: Int = 0
@objc dynamic var group: NSNumber = 0
convenience init(group: NSNumber, name: String, id: String, phone: String, country: String, identifier: String, gender: Int, level: Int) {
self.init()
self.name = name
self.phone = phone
self.id = id
self.country = country
self.identifier = identifier
self.gender = gender
self.level = level
self.group = group
}
}
最佳答案
这似乎不是 Realm 问题,而更像是 xCode 问题。
- super 清理项目
cmd + alt + shft + k
。 - 删除
/Users/signed-in-user/Library/Developer/Xcode/DerivedData
中的派生数据 - 从设备中删除应用程序以清除所有 Realm 数据(更改模型需要删除应用程序或迁移数据库)
- 重新启动 xcode 并查看是否有帮助。 (彻底戒掉)
这通常可以修复许多问题,包括幻象断点。我曾经遇到一个非常奇怪的问题,导致数据存在于 Realm 文件中,但是当在代码中访问时,它不存在。在同事的计算机上测试后,我发现它是我的 xCode。即使上述方法也没有解决问题,在尝试了网上可以找到的所有方法后,我在完全删除之前的安装后重新安装,它再次工作。
此外,使用 Realm 列表
`let emailList = List<String>()`
关于swift - Realm 崩溃,错误原因为 : 'Property ' person' is declared as 'NSArray' even though I have removed the array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51804753/