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

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

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

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

Swift

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

Q&A

解決済

1回答

3654閲覧

realmでfilterをかけたが、それに対応するObjectが一つもなかった時の挙動について

nasutaro211

総合スコア21

Realm

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

Swift

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

0グッド

0クリップ

投稿2018/08/25 19:16

編集2018/08/27 10:20

RealmのObjectsをあるカラムの種類ごとに分けたいです。
そのため以下のプログラムを組んだのですが、filterをかけた結果が空の場合、【】部がエラーになってしまい上手く分けることができません。
何かいい手段はないでしょうか?

swift

1class MyObject{ 2 kind:Int = 0//ここの種類ごとにものを分けたい 3} 4 5let realm = try! Realm() 6let myObjects = realm.objects(MyObjects.self)//全部のMyObjectを入れた 7var kindsMyObjects:Array<Results<Object>> = []//ここにkindごとに分かれたobjectsを入れる([kind1Objects, kind2Objects, ...]て感じ) 8for i 0...kindNum{ 9 //種類ごとに全体のObjectsから分けて 10 let aKindMyObjects = myObjects.filter("kind==%@",i)//【ここが空だとこの行でエラーになる】 11 if !aKindMyObjects.isEmpty{//その種類のobjectが存在したら追加する 12 kindMyObjects.append(aKindObjects) 13 } 14}

追記
エラーになるのは【】のところの行でエラーになります。

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

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

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

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

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

t_obara

2018/08/27 05:18

どのようなエラーになるのでしょうか?filter行でエラーになる?そのあたりの状況をご提示いただくと回答が付きやすいのではないでしょうか。
nasutaro211

2018/08/27 10:21

ありがとうございます!フィルター行でエラーになります。
guest

回答1

0

ベストアンサー

興味があって環境が眼の前にあったので、再現したのですがエラーがでませんでした。
やられたいことと再現方法がちがってますか?
それと申し訳ないのですが、当方詳しくないので説明とかはできません。

swift

1 2class MyObject: Object { 3 @objc dynamic var kind: Int = 0 4} 5

swift

1 2let realm = try! Realm() 3 /* 4 // オブジェクトの登録時 5 try! realm.write { 6 7 let obj = [MyObject(value: ["kind": 0]), 8 MyObject(value: ["kind": 2]), 9 MyObject(value: ["kind": 3]), 10 ] 11 realm.add(obj) 12 } 13 */ 14 15 let kindNum = 4 16 17 let myObjects = realm.objects(MyObject.self) 18 19 var kindsMyObjects:Array<Results<MyObject>> = [] 20 21     for i in 0...kindNum{ 22 let aKindMyObjects = myObjects.filter("kind==%@",i) 23 if !aKindMyObjects.isEmpty{ 24 kindsMyObjects.append(aKindMyObjects) 25 } 26 } 27 28 print("kindsMyObjects:", kindsMyObjects) 29      30 /* 31     => 32 kindsMyObjects: [Results<MyObject> <0x7fa4d0c0d900> ( 33 [0] MyObject { 34 kind = 0; 35 } 36 ), Results<MyObject> <0x7fa4d0c0e650> ( 37 [0] MyObject { 38 kind = 2; 39 } 40 ), Results<MyObject> <0x7fa4d0c0ea20> ( 41 [0] MyObject { 42 kind = 3; 43 } 44 )] 45 46*/ 47 } 48

投稿2018/08/27 11:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nasutaro211

2018/08/30 05:56

もう一度書き直してみたら通りました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問