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

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

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

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

2771閲覧

Swift2 Realmを使ったループでの複数データ追加が失敗する。

chikasan

総合スコア12

Realm

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

1クリップ

投稿2016/06/25 11:59

##Swift2 Realmを使ったループでの複数データ追加が失敗する。

タイトルのままですが、forを使ってループでデータの追加をすると、
エラーが発生してダウンします。
連続でデータ追加する方法があれば教えていただきたいです。

#試したこと
0. 一行だけなら問題なく追加できる。(ループするとエラー)
0. printでデータが正しく出力されるので、Jsonのパースはできている。

※以下のエラーが発生していると出てくる。
terminating with uncaught exception of type NSException

lang

1// ViewController 2 3// JSONの読み込み処理 SwiftyJson使っています 4let path = NSBundle.mainBundle().pathForResource("event", ofType: "json")! 5let jsonData = NSData(contentsOfFile: path)! 6let json = JSON(data: jsonData) 7 8// モデルとRealmクラスのインスタンス 9let eventData = EventData() 10let realm = try! Realm() 11 12// forでループ 13for i in 0...30 { 14 eventData.eventId = json[i]["eventId"].int! 15 eventData.apiId = json[i]["apiId"].int! 16 eventData.catchphrase = json[i]["catchphrase"].string! 17 eventData.desc = json[i]["desc"].string! 18 eventData.url = json[i]["url"].string! 19 eventData.limit = json[i]["limit"].int! 20 eventData.accepted = json[i]["accepted"].int! 21 eventData.waitlisted = json[i]["waitlisted"].int! 22 eventData.address = json[i]["address"].string! 23 eventData.checkStatus = json[i]["checkStatus"].int! 24 eventData.stratAt = NSDate() 25 eventData.endAt = NSDate() 26 // printは問題なく値を出力 27 print(eventData.apiId) 28 try! realm.write { 29 // 書き込みをするとエラーになる 30 realm.add(eventData) 31 } 32 }

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

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

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

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

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

guest

回答1

0

自己解決

解決しました
書き込みのトランザクション

swift

1try! realm.write { 2 let eventData = EventData() 3 eventData.eventId = json[i]["eventId"].int! 4 eventData.apiId = json[i]["apiId"].int! 5 eventData.catchphrase = json[i]["catchphrase"].string! 6 eventData.desc = json[i]["desc"].string! 7 eventData.url = json[i]["url"].string! 8 eventData.limit = json[i]["limit"].int! 9 eventData.accepted = json[i]["accepted"].int! 10 eventData.waitlisted = json[i]["waitlisted"].int! 11 eventData.address = json[i]["address"].string! 12 eventData.checkStatus = json[i]["checkStatus"].int! 13 eventData.stratAt = NSDate() 14 eventData.endAt = NSDate() 15 realm.add(eventData) 16}

投稿2016/06/26 00:46

編集2016/06/28 01:27
chikasan

総合スコア12

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

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

Mr_Roboto

2016/06/26 00:53

Realmって知らなくて、へーと思って気になってたので良かったですね ^^
chikasan

2016/06/26 00:59

ドキュメント読めばわかる問題でした・・・w
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問