3

Realm Model に NSData 変数を追加すると、エラーが発生します。

致命的なエラー: オプション値のラップ解除中に予期せず 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
}
4

1 に答える 1

1

移行が必要であるというエラー メッセージが表示されました。

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

このエラーを解決するには、3 つの方法があります。

1. スキーマ バージョンのインクリメント

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

移行プロセスには 2 つのステップが必要です。まず、スキーマ バージョンをインクリメントします。次に、移行ブロック内で移行を定義します。ただし、プロパティの単純な追加/削除の場合は、自動移行が機能します。したがって、移行ブロックを定義する必要はありません。スキーマのバージョンをインクリメントするだけです。

2. 既存のアプリを削除して再インストールする

アプリの削除とは、既存のデータ ファイルを削除することを意味します。次回アプリを起動すると、新しいデータ ファイルが新しいスキーマで作成されます。

3.deleteRealmIfMigrationNeededプロパティの使用

が true の場合、移行が必要な場合deleteRealmIfMigrationNeeded、データ ファイルは削除され、新しいスキーマで自動的に再作成されます。

let config = Realm.Configuration(deleteRealmIfMigrationNeeded: true)
do {
    let realm = try Realm(configuration: config)
于 2016-05-16T10:24:41.333 に答える