質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

5536閲覧

let realm = try Realm() でエラーが発生

Kuma44

総合スコア9

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/09/16 10:08

モデルを作成した後にプライマリキーを設定したためエラーが発生しました。
Realmのデータを全て削除するか、初期化して再度読み込むにはどうしたらいいでしょうか。
初心者で用語等わからないことも多いのですが、何卒よろしくお願いいたします。

プライマリキー設定前

MyModelClass.swift

swift

1import RealmSwift 2 3/*** テーブル ***/ 4class Table: Object { 5 @objc dynamic var tableId:Int = 0 6 @objc dynamic var tableName = "" 7}

プライマリキー設定後

MyModelClass.swift

swift

1/*** テーブル ***/ 2class Table: Object { 3 @objc dynamic var tableId:Int = 0 4 @objc dynamic var tableName = "" 5//⇩追加⇩ 6 override static func primaryKey() -> String? { 7 return "tableId" //idプロパティをプライマリーキーに指定 8 } 9}

該当のソースコード

swift

1import UIKit 2import RealmSwift 3 4class ViewController: UITabBarController { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 // Do any additional setup after loading the view. 9 10 // カスタマイズ 11 // tab背景色 12 UITabBar.appearance().barTintColor = UIColor.white 13 14 15 //▼▼▼ データベースの操作の処理を書く ▼▼▼ 16 let dataJson: String = jsonPath(master : "master") 17 18 do { 19 try parse(json: dataJson, table: "table") 20 } catch { 21 print("error") 22 } 23 24 //realmのファイルURLを確認 25 print(Realm.Configuration.defaultConfiguration.fileURL!) 26 27 } 28 29 override func didReceiveMemoryWarning() { 30 super.didReceiveMemoryWarning() 31 // Dispose of any resources that can be recreated. 32 } 33 34 /*** 関数 ***/ 35 func jsonPath(master: String) -> String { 36 37 // jsonファイル内容を格納する変数の定義 38 var jsonStr = "error(sample)" 39 40 // jsonファイルまでのパスを取得(同時にnilチェック) 41 if let path: String = Bundle.main.path(forResource: master, ofType: "json") { 42 do { 43 // jsonファイルの内容を取得する 44 jsonStr = try String(contentsOfFile: path) 45 print("str: (jsonStr)") 46 } catch { 47 print("ファイルの内容取得時に失敗") 48 } 49 }else { 50 print("指定されたファイルが見つかりません") 51 } 52 return jsonStr 53 } 54 55 struct ParseError: Error {} 56 /*** 関数 ***/ 57 func parse(json: String, table: String) throws { 58 guard let data = json.data(using: .utf8) else { 59 throw ParseError() 60 } 61 let json = try JSONSerialization.jsonObject(with: data) 62 guard let rows = json as? [[String:Any]] else { 63 throw ParseError() 64 } 65 for row in rows { 66 //仮格納 67 let id = row["tableId"] ?? 0 68 let name = row["tableName"] ?? "" 69 print("(id) is (name)") 70 71 //Realmのインスタンス取得 72 do { 73 let realm = try Realm() //◀︎◀︎◀︎ここでエラー!! 74 let table = Table() //Personモデルのオブジェクトを取得 75 table.tableId = id as! Int 76 table.tableName = name as! String 77 78 try! realm.write() { 79 realm.add(table, update: true) // データが無ければ追加、あったら上書き 80 print("成功だよ", jinei) 81 } 82 } 83 } 84 }

試したこと

こちらの質問と同じような感じだったので確認しましたが
「既存のファイルを消してやり直す」がわからず、
「NSFileManagerなどでRealmのファイルを消す」もわからず、
「マイグレーションが必要な場合に自動的にファイルを削除して作り直してくれる機能」で以下コードを「let realm = try Realm() 」前に入れてみましたが、入れる場所が間違っているのか結果は変わりませんでした。

swift

1let config = Realm.Configuration(deleteRealmIfMigrationNeeded: true) 2Realm.Configuration.defaultConfiguration = config

補足情報(FW/ツールのバージョンなど)

デバッグに「print("(id) is (name)")」のが1回だけ表示された後に「print("error")」が表示されたので、「let realm = try Realm() 」の部分で止まっていることがわかりました。
プライマリキーを設定した後に動かなくなったので、おそらくそれが原因だと思い質問させていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

リンク先にあるように、シミュレータもしくは実機からアプリをアンインストールした後に、
編集したコードでRunすればよろしいかと…。

投稿2018/09/17 02:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kuma44

2018/09/23 07:46

返信が遅くなり申し訳ございません。 よくわからず色々やってたらいつの間にか解消されました。 次回また起こったらアプリをアンインストールしてからRunする方法でやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問