0

我是 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
}
}
4

1 回答 1

0

这似乎不是一个领域问题,而更像是一个 xCode 问题。

  1. 超级干净的项目cmd + alt + shft + k
  2. 删除派生数据/Users/signed-in-user/Library/Developer/Xcode/DerivedData
  3. 从您的设备中删除应用程序以清除所有领域数据(更改模型将需要擦除应用程序或迁移数据库)
  4. 重新启动 xcode 看看是否有帮助。(完全退出)

这通常可以解决许多问题,包括幻像断点。曾经有一个非常奇怪的问题导致数据存在于领域文件中,但是当在代码中访问时,它不存在。在同事的计算机上进行测试后,我发现它是我的 xCode。即使上述方法也无法解决问题,在尝试了您可以在网上找到的所有内容后,我在完全擦除之前的安装后重新安装,它又可以工作了。

此外,使用领域列表

`let emailList = List<String>()`
于 2018-08-23T04:01:05.137 回答