swift - Realm 崩溃,错误原因为 : 'Property ' person' is declared as 'NSArray' even though I have removed the array

标签 swift realm

我是 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 问题。

  1. super 清理项目cmd + alt + shft + k
  2. 删除 /Users/signed-in-user/Library/Developer/Xcode/DerivedData 中的派生数据
  3. 从设备中删除应用程序以清除所有 Realm 数据(更改模型需要删除应用程序或迁移数据库)
  4. 重新启动 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/

相关文章:

ios - 设置 Realm 架构版本

swift - 在 Swift 中使用 Realm 过滤,给我一个对象数组,但是当打印一个属性时,它给我一个空字符串

ios - Realm - 无法使用现有主键值创建对象

ios - Swizzling UIImage.init(名为 :) returns nil when getting the instance method

ios - 无法使用类型为 '[NSObject : AnyObject]?' 的索引下标类型为 'String' 的值

ios - 可选 ("Operation in progress.") 当使用 HomeKit 在 iOS 模拟器上添加配件时

swift - Realm - 将子级添加到父级,然后在父级上查询结果

ios - Realm 和 iOS 保留周期

iOS 后台下载使用 NSURLSessionConfiguration

swift - PerformActionFor快捷方式AppDelegate.swift(Swift 4)