具有 NSData 变量的领域对象,在展开可选值时意外发现 nil

Posted

技术标签:

【中文标题】具有 NSData 变量的领域对象,在展开可选值时意外发现 nil【英文标题】:Realm object with NSData variable , unexpectedly found nil while unwrapping an Optional value 【发布时间】:2016-05-14 22:22:12 【问题描述】:

将 NSData 变量添加到我的领域模型后出现错误:

致命错误:在展开 Optional 时意外发现 nil 价值

当我不使用 NSData 值时,不会出现此错误。

这是我的简单物品 (Item.swift)

    class Item: Object 
    dynamic var Name: String = ""
    dynamic var Adress:String = ""
    dynamic var image: NSData = NSData()

我在返回 dataSource.Count 时收到此错误:

var dataSource: Results<Item>!
let itemDetailSegue = "showItemDetail";
var loadCurrentItem: Item!

override func viewWillAppear(animated: Bool) 
    super.viewWillAppear(animated)
    reloadTable()


override func viewDidLoad() 
    super.viewDidLoad()
    reloadTable()


// MARK: - Table view data source
func reloadTable()
    do
        let realm = try Realm()
        dataSource = realm.objects(Item)
        tableView?.reloadData()
    catch
        print("ERROR ReloadTable")
    


override func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    return 1


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return dataSource.count

【问题讨论】:

我认为初始化Realm时出错。也许是迁移错误?您可以尝试打印错误吗?像下面这样: catch let error as NSError print(error) >UserInfo=错误代码=10, NSLocalizedDescription=由于以下错误,需要迁移:- 属性“图像”已添加到最新对象模型。 致命错误:展开时意外发现 nil一个可选值现在我得到这个错误 只需要从模拟器中删除我的应用程序***.com/questions/33363508/… ...谢谢@kishikava katsumi 【参考方案1】:

错误消息说需要迁移。

Migration is required due to the following errors: - Property 'image' has been added to latest object model.

有三种方法可以解决此错误。

1。递增架构版本

let config = Realm.Configuration(schemaVersion: 1) // Increment schema version
do 
    let realm = try Realm(configuration: config)

迁移过程需要两个步骤。首先,增加架构版本。然后在迁移块中定义迁移。但是如果是简单的添加/删除属性,自动迁移就可以了。所以你不需要定义迁移块。只需增加架构版本即可。

2。删除现有应用并重新安装

删除应用程序意味着删除现有的数据文件。因此,下次启动应用程序时,将使用新架构创建一个新数据文件。

3。使用deleteRealmIfMigrationNeeded 属性

deleteRealmIfMigrationNeeded 为真时,如果需要迁移,数据文件将被删除并使用新架构自动重新创建。

let config = Realm.Configuration(deleteRealmIfMigrationNeeded: true)
do 
    let realm = try Realm(configuration: config)

【讨论】:

以上是关于具有 NSData 变量的领域对象,在展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 在展开可选值时意外发现 nil - 从委托调用变量

尝试将谓词与关系对象一起使用时,“致命错误:在展开可选值时意外发现 nil”

IBOutlet 变量在我尝试访问它们时返回 nil。错误:线程 1:致命错误:在展开可选值时意外发现 nil

在展开可选值 uint32 swift 时意外发现 nil

不确定如何为现有代码正确设置我的变量。致命错误:在隐式展开可选值时意外发现 nil

致命错误:在展开可选值时意外发现 nil(添加到数组时)