App storeへのRealm使用アプリの申請の際のスキーマバージョンについて

投稿者: Anonymous App StoreにあがってるアプリはRealmを初めて使ったままのスキーマ定義なのでスキーマは変更しておりません。それゆえ、configやスキーマバージョンも書いておりません。 スキーマ定義を変更する必要が出たので今回ローカル上でスキーマのバージョンを上げてマイグレーション処理を行ったりと色々試行錯誤しましたがうまくいかなく、Simulatorで一度アプリを削除してバージョンを0にしたところビルドもマイグレーションもできました。 ただApp store上のアプリはdidFinishLaunchingWithOptionsで定義をせずにアプリを申請していたため、次にアプリをアップデートする際にはdidFinishLaunchingWithOptionsのブロック内にスキーマバージョンを上げて記述し、書かなければならないのですがこの際の値は0で問題ないのでしょうか。 解決 Realmのファイルは各ユーザーのデバイスにそれぞれファイルが存在するわけですので、手元でアプリを削除してうまくいってもリリースされたアプリを使うユーザーのデバイスではそうはなりません。すでにそのアプリを利用しているユーザーのデバイスには変更前のスキーマのファイルがあるので、アプリをバージョンアップした際にはスキーマが一致しないので、スキーマバージョンを上げていなければクラッシュします。 まだアプリをAppStoreで配布してなければ、もちろん開発時は自由に試行錯誤できますが、一度リリースしてしまったなら、アップデートでスキーマを変更するならスキーマバージョンも合わせて上げる必要があります。 ただし、既存のデータを消してしまってもいいのであれば、Realm.RealmConfiguration.deleteRealmIfMigrationNeededプロパティを使うと、マイグレーションが必要な場合は自動的に既存のファイルを消して作り直すということを自動的にやってくれます。 スキーマバージョン0から1のマイグレーション時はデータ削除、1から2のマイグレーション時はデータ移行をする、としたい場合は、私なら下記のように書きます。条件に応じてdeleteRealmIfMigrationNeededプロパティを切り替える方法よりも意図が明確になります。 let config = Realm.Configuration(schemaVersion: 2, migrationBlock: { (migration, schemaVersion) in if schemaVersion < 1 { migration.deleteData(forType: “ModelA”) migration.deleteData(forType: “ModelB”) migration.deleteData(forType: “ModelC”) } if schemaVersion < 2 { migration.enumerateObjects(ofType: “ModelA”) { (newObject, oldObject) in … } migration.enumerateObjects(ofType: “ModelB”) { (newObject, oldObject) in … }…(Continue Reading)

Realmをデータソースにしてテーブルビューの並べ替えをしたい

投稿者: Anonymous RealmにてPrimaryキーを書き換えようとしています。 それによってTableViewの並べ替えをしたいと考えております。 しかし以下のコードではプライマリーキーのIDを書き換える時にエラーが出ます。 Terminating app due to uncaught exception ‘RLMException’, reason: ‘Primary key can’t be changed after an object is inserted.’ エラーメッセージと公式サイトの情報から推察すると、プライマリーキーは変更できないという理解でよろしいでしょうか? できないとすると、一般的には一度すべてのデータ(多くても数十件のデータを想定)を避難して、DBをすべて削除し採番し直して追加ということで対処するのがいいのでしょうか。 もしくは、テーブルに表示順を持たせて、それを書き換えるのがいいのでしょうか。 ご教授いただけないでしょうか。 よろしくお願いいたします。 ※以下のコードは、間違いがあるかもしれませんので、したいことを理解する目的で参考にしていただければと思います。 //メインデータ class mainDataTable: Object { dynamic var ID = Int() let Days = List<subDataTable>() //LinkingObjects(fromType: subDataTable.self, property: “Day”) // dynamic var CategoryNo = Int() override static…(Continue Reading)

realmファイルにパスワードを設定することはできますか?

投稿者: Anonymous Realm databaseとRealm Strudioを利用しています。 アプリ内のrealmファイルのセキュリティの強化したいと考えており、 Realm Strudioでrealmファイル(default.realm)を開くときに、 パスワード入力などを求めることはできるのでしょうか? アプリから何らかの方法でrealmファイルにアクセスできる状態になったときに、 第三者にrealmファイルの中身を見られることを避けたいと考えております。 よろしくお願いします。 解決 Realmは暗号化キーによる暗号化をサポートしているので、それが期待する機能になります。 Realm supports encrypting the database file on disk with AES-256+SHA2 by supplying a 64-byte encryption key when creating a Realm. https://realm.io/docs/swift/latest#encryption Realmファイルに暗号化キーを設定した場合、ファイルを読み書きするには必ず暗号化キーが必要になります。 暗号化キーによって暗号化されたRealmファイルは、第三者がファイルにアクセスできる状態であっても暗号化キーを知らなければ内容を読み取ることはできません。 回答者: Anonymous

GitHubのオープンソースプロジェクトがビルドできません

投稿者: Anonymous RealmSwiftを使ってToDoみたいなものを作ろうとしているのですが、ちょうど良いサンプルが見つかったのでさっそくダウンロードしてビルドしてみました。 https://github.com/hossamghareeb/realmtasks しかし、そのままビルドすると以下のようなエラーが出て止まってしまいます どのようにしたらビルドできるようになるでしょうか? 解決 ずいぶん古いプロジェクトなので最新版のXcode 7.3ではそのままではコンパイルできません。 Swiftの仕様が変わっているためです。 ビルドする方法は2つあります。 まず古いXcodeを使う方法です。 こちら https://developer.apple.com/downloads/ から過去のバージョンのXcodeがダウンロードできますので、7.0.1をダウンロードしてください。 7.0.1でしたらそのままビルドして実行できます。 もう一つは最新版のXcodeでもビルドできるようにコードを修正することです。 サンプルコードとして参考にするということなので、最終的にはこちらの方法がいいでしょう。 まずは、pod updateを実行して、依存ライブラリを最新にアップデートします。 (依存ライブラリが古くてビルドエラーが起きているため) これでRealmのバージョンが0.95から0.102になります。 そして、Swift 2で変更になったエラー処理のコードなどをSwift 2でビルドできるように修正します。 このプロジェクトの場合はRealm.write()メソッドの部分にtry!を付けるだけでビルドできるようになります。 回答者: Anonymous

Realmのテーブル構造(モデルクラス)変更について

投稿者: Anonymous Android、Realm0.83.1で開発をしております。 アプリアップデート時、Realmのテーブル構造(モデルクラス)を変更すると、アプリ起動時にRealmがエラーを出力してクラッシュします。 Realmではalter tableのようなテーブル構造(モデルクラス)の変更はできないのでしょうか? 以下がエラーログです。 io.realm.exceptions.RealmMigrationNeededException: RealmMigration must be provided at io.realm.BaseRealm.migrateRealm(BaseRealm.java:568) at io.realm.Realm.migrateRealm(Realm.java:1064) at io.realm.Realm.migrateRealm(Realm.java:1053) at io.realm.Realm.create(Realm.java:253) at io.realm.Realm.getInstance(Realm.java:219) at io.realm.Realm.getInstance(Realm.java:182) 解決 Realmの中の人に教えてもらいました! Migrationクラスを使うとバージョンごとの管理ができます 回答者: Anonymous

RealmSwiftのマイグレーションについて

投稿者: Anonymous 当方、RealmSwiftを使ってアプリを作っております。 この程、RealmSwiftが0.102になり、マイグレーション処理が変更になったそうですね? そこで質問です。 マイグレーションが必要な場合に、Realmファイルを削除する具体的な方法を教えていただきたいです。 deleteRealmIfMigrationNeededのプロパティをどう使えば、開発途中の不要なRealmファイルを削除できますか? 解決 RealmSwiftが0.102になり、マイグレーション処理が変更になったそうですね? マイグレーション処理の基本はまったく変わっていません。単に小さな改善が入っただけです。 Realmには日本語のドキュメントも用意されていますので、まずドキュメントに目を通されることをおすすめします。 https://realm.io/jp/docs/swift/latest/#section-40 バージョン0.102から追加されたdeleteRealmIfMigrationNeededをtrueに設定することで、マイグレーションが必要でかつマイグレーションが行われない場合に、エラーを出す代わりに自動的に古いファイルを削除して新しいデータ定義を用いて作り直してくれるようになりました。 deleteRealmIfMigrationNeededはRealm.Configurationのプロパティなので、使用するにはこの値をtrueにしてConfigurationオブジェクトを作成し、Realmインスタンスを作成する際に、このConfigurationオブジェクトを渡します。 let config = Realm.Configuration(deleteRealmIfMigrationNeeded: true) let realm = try! Realm(configuration: config) Realmをインスタンス化している場所すべてで同様にする必要がありますが、defaultConfigurationとして設定すると、それ以降は、いちいちConfigurationオブジェクトを渡さなくてもdefaultConfigurationに設定したオブジェクトが使用されるようになり便利です。 let config = Realm.Configuration(deleteRealmIfMigrationNeeded: true) Realm.Configuration.defaultConfiguration = config let realm = try! Realm() 回答者: Anonymous

カスタムキーボードエクステンションでRealmを使いたいが実行時にフレームワークが見つからないエラー

投稿者: Anonymous dyld: Library not loaded: @rpath/Realm.framework/Realm Referenced from: /Users/User/Library/Developer/CoreSimulator/Devices/830BF1AF-9059-445F-AC17-FC40D97C9C6E/data/Containers/Bundle/Application/9D7F484F-0512-49EE-92B4-9F00FCB00351/test.app/PlugIns/test-key.appex/test-key Reason: image not found 上記のエラーが出ます。 改善方法を教えていただければ幸いです。 解決 ビルドする際に。フレームワークをエクステンションのバンドルにコピーする必要があります。 そのために、ターゲットのBuild Phasesの設定にフレームワークをバンドル内の所定の位置にコピーする設定を追加します。 Xcodeでプロジェクトを選択して、カスタムキーボードエクステンションのターゲットを選択します。 そして、「Build Phases」を選択し、左上の「+」ボタンから「New Copy Files Phase」を追加します。 一番下に「Copy Files」というフェーズが追加されるので、そこにフレームワークをコピーする設定を追加します。 コピー先は「Frameworks」でなければならないので、「Destinaton」を「Frameworks」に変更します。 そして、「+」ボタンを押して「Realm.framework」と「RealmSwift.framework」を追加します。 ここまで設定が済めば、再ビルドして実行してみてください。 エラーが解消されるはずです。 回答者: Anonymous

Realm Objective-CをSwiftから使う際にマイグレーションのコードでコンパイルエラー

投稿者: Anonymous 現在、Realmの使い方を学んでいます。 そこで、http://qiita.com/jtemplej/items/10ed4bc0cc6519682e6e#notification のコードを下記のように書き写して、マイグレーションを勉強しています。 // Book.swift class Book : RLMObject { dynamic var isbn = “” dynamic var name = “” dynamic var price = 0 //サムネイルを追加したいから、imageURLを追加 dynamic var imgURL = “” dynamic var publisher = Publisher() dynamic var owner: Publisher? { return linkingObjectsOfClass(“Publisher”, forProperty:”books”).first as? Publisher } class func find(isbn:String) -> Book? {…(Continue Reading)

iOSでRealmデータベースを開こうとするとエラーになる(AppGroupの使用)

投稿者: Anonymous カスタムキーボードエクステンションからファイルが読み込めない 上記を参考にしていますが・・・ print(realmPath) では /private/var/mobile/Containers/Shared/AppGroup/****-****–****/test.realm となりますが・・・ let realm = try! Realm(path: realmPath) のところで、 2015-10-16 08:58:46.720 Test-Keyboard[8880:557651] ***storageTaskManagerExistsWithIdentifier:withIdentifier failed: Error Domain=NSCocoaErrorDomain Code=4099 “The connection to service named com.apple.nsurlstorage-cache was invalidated.” UserInfo={NSDebugDescription=The connection to service named com.apple.nsurlstorage-cache was invalidated.}; { NSDebugDescription = “The connection to service named com.apple.nsurlstorage-cache was invalidated.”;} fatal error: ‘try!’ expression unexpectedly…(Continue Reading)

更新が完了したRealmの情報が取得できない(更新前の情報が取得される)

投稿者: Anonymous Realm + Retrofit + OkHttp を利用して API をコールするアプリを作ろうと設計しています。ログインが成功すると accessToken と refreshToken をサーバーから返却する仕組みにしていて、返却された値を Realm に保存し、次回以降は Realm から accessToken を取得することを考えています。 accessToken には有効期限があり、有効期限が切れた accessToken を用いて API をコールすると 401 エラーが返却され、refreshToken を利用して accessToken を更新する仕様で進めているのですが、 Realm に保存した情報が上手く取得できず、どこに問題があるか教えていただけないでしょうか? (現象) accessToken の有効期限が切れた状態で、Retrofit を用いて 2 つの非同期なリクエストを同時に投げる(リクエストA, B) accessToken の有効期限が切れている為 A, B とも 401エラーが返却される TokenAuthenticator の authenticate メソッドが A , B とも呼ばれる A…(Continue Reading)

RealmとObjectMapperの組み合わせで Cannot invoke initializer for type ‘User’ with an argument list of type ‘(forPrimaryKey: String)

投稿者: Anonymous RealmとObjectMapper(https://github.com/Hearst-DD/ObjectMapper)を組み合わせで以下のようなモデルを作っているのですが、このモデルを User(forPrimaryKey: “1”) の呼び出し方でインスタンス化しようとした場合、Cannot invoke initializer for type ‘User’ with an argument list of type ‘(forPrimaryKey: String)’ と怒られてしまいます。 class User: RLMObject, Mappable { var id:String? var name:String? required init?(_ map: Map) { super.init() mapping(map) } func mapping(map: Map) { id <- map[“id”] name <- map[“name”] } override class func primaryKey() -> String {…(Continue Reading)

realmのデータファイルをdropboxにバックアップし、復元する方法について

投稿者: Anonymous swiftで日記アプリを作っています。 実現したいことは、ローカルデータベースrealmのデータファイル(default.realm)をdropboxにバックアップし、復元することです。 そこで、日記の登録、修正、削除があったタイミングでdefault.realmをdropboxにアップロード(上書き)し、常に最新のdefault.realmに更新するところまでは実装しました。 復元の方は、アプリを再ダウンロードし、再びドロップボックスにログインしたタイミングで、バックアップしておいたdefault.realmをDocumentDirectoryのdefault.realmに上書きするという方法を考えています。 しかしこの方法だと、再ダウンロードしてからドロップボックスにログインするまでに、日記の登録があった場合に、その分のデータが消えてしまいます。 どのようにすればデータの取りこぼしなくdropboxにバックアップ、復元できるのでしょうか。よろしくお願いします。 解決 未ログイン時に登録されたデータは別に保存しておいて、DropBoxにログインして古いデータを復元した際にマージする、という方法になると思います。 Realmではファイルを分けることは非常に簡単にできます。Realmインスタンスを作る時にRealm.Configurationオブジェクトで別のパスを指定するだけです。 そしてDropBoxに復元したデータに、未ログイン時のデータを1件ずつコピーすれば良いでしょう。 回答者: Anonymous

親子関係ではない、他のViewControllerのインスタンスの値を変更する

投稿者: Anonymous はじめまして。 全く関係のない(親子関係ではない)他のViewControllerの値を変更したいですが、うまく変更させることができません。 ご教授いただけますでしょうか。 【前提】 FirstViewController(FirstVC)にはscrollView上に乗っているteamIcon(UIButton)があり、自身のボタン画像としてrealm内に保存されたデータ(NSData)を取得している。 また自身をタップするとカメラロールを開き、画像を選択後、realmに保存することができる。 一方、SecondViewController(SecondVC)にも、teamIcon(UIImageView)があり、realm内に保存されているデータ(上記、FirstVCで述べているデータと同じもの)を表示している。 【やりたいこと】 FirstVCのteamIcon(UIButton)をタップ、realmに保存後、SecondVCのteamIcon(UIImageView)の画像も、そのタイミングで変更する。 【現状】 FirstVCのteamIcon(UIButton)をタップ後、AppDelegateを通じて、SecondVCのteamIconを変更するための関数の呼び出しは成功している模様(print()が動いていることから推測)。 だが、その関数内の teamIcon.image がうまく効いてくれない。 お手数をおかけしますが、アドバイス頂けると幸いです。 宜しくお願い致します。 FirstVC import UIKit import Photos import AssetsLibrary import RealmSwift class FirstViewController: UIViewController, UIPickerViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { var appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate var memberCollectionView : UICollectionView! var memberCollectionRetsu : Int = Int() var memberCollectionHeight : CGFloat…(Continue Reading)

Use of unresolved identfiler ‘paths’というコンパイルエラー

投稿者: Anonymous OSXでは問題ないのですがiOS用にソフトを作るとえらーになります。 import UIKit import Foundation import RealmSwift extension String : CollectionType {} class dic: Object { dynamic var ID = 0 dynamic var yomi = “” dynamic var kaomoji = “” dynamic var date = NSDate(timeIntervalSince1970: 1) override static func primaryKey() -> String? { return “ID” } } class KeyboardViewController: UIInputViewController { var…(Continue Reading)

Stringの大小比較の方法について

投稿者: Anonymous Swift初学者ですが、データ保存にRealmの利用してアプリを開発しようと思っています。 Realmで保存したデータを読み出す際、Stringの項目に対して「○○以降」という抽出をかけたいのですが、 filterで比較演算子”>=”を記述したところ、下記エラーとなりました。 class realmLog: Object { dynamic var stringItem = String() //項目をStringで宣言 } ・・・ /* 抽出結果の取得 */ let realmRec = realm.objects(realmLog.self).filter(“stringItem >= “(Condition)””) ‘Invalid operator type’, reason: ‘Operator ‘>=’ not supported for string type’ RealmでString項目に対し「○○以降」という抽出をかけるにはどのように記述すればよいのでしょうか。 あるいはRealmで一旦全件抽出を行い、別途抽出結果に対して「○○以降」という条件で読み飛ばすような処理を記述すべきでしょうか。 解決 Stringのプロパティに対して大小比較はできないので、代わりにソートして上から(もしくは下から)使うのが良いと思います。 let realmRec = realm.objects(realmLog.self).sorted(byKeypath: “stringItem”) ^ Realmは遅延ロードが自動的に働くので、抽出しなくても実際に使った(アクセスした)ぶんだけのメモリ消費しかありません。 あと、filterの条件をSwiftのString Interpolationを使ってますが、一般的にString Interpolationをクエリの組み立てなど重要な部分に使用するのはバグの元なので、NSPredicateの置き換えを利用して、 .filter(“stringItem >= %@”, Condition)…(Continue Reading)

保存先のファイルパスを指定してRealmを取得する方法がわかりません

投稿者: Anonymous let realm = try! Realm() のところで、 test1 2015-08-17 07:15:03.482 test-key[93017:5643534] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) test1.5 test2 test3 と出てしまいます。 ソースは下記の通りです。 import UIKit import RealmSwift import Foundation class dic: Object { dynamic var ID = 0 dynamic var yomi = “” dynamic var emoji = “” dynamic var date = NSDate(timeIntervalSince1970: 1) override…(Continue Reading)

Realmがbuild できない

投稿者: Anonymous watchOS3(swift3.0)用のRealm.framework, RealmSwift.frameworkが必要になり、リポジトリをbuildしましたがエラーが出ます。 記事Rwift2でRealmを使いたいを参考に下記手順を実施しました。 1. Xcode8(8A218a)のコマンドラインツールを選択。–>>記事のXcode7を8に読み替えています。 2. https://github.com/realm/realm-cocoa よりリポジトリーをダウンロード 3. sh build.sh ios-swift –>> エラー発生, buildも同じ ログが非常に大きいため、下記エラー部分のみを抜粋しています。 もし、解析に必要ば部分があればおしらせください。追加掲載します。 お判りの方がおられたなら、ご教授いただきたく、よろしくお願いします。 CompileC build/DerivedData/Realm/Build/Intermediates/Realm.build/Release-iphoneos/Realm.build/Objects-normal/armv7/collection_change_builder.o Realm/ObjectStore/src/impl/collection_change_builder.cpp normal armv7 c++ com.apple.compilers.llvm.clang.1_0.compiler …………… clang: error: no such file or directory: ‘/Users/hogehoge/Desktop/REALM/realm-cocoa-master/Realm/ObjectStore/src/impl/collection_change_builder.cpp’ clang: error: no input files CompileC build/DerivedData/Realm/Build/Intermediates/Realm.build/Release-iphoneos/Realm.build/Objects-normal/armv7/collection_notifications.o Realm/ObjectStore/src/collection_notifications.cpp normal armv7 c++ com.apple.compilers.llvm.clang.1_0.compiler ……………. clang: error: no such file or…(Continue Reading)

‘RLMResults’ is not convertible to ‘RLMObject’

投稿者: Anonymous データベースの行を削除しようとすると、realm.deleteObjectの行で「’RLMResults’ is not convertible to ‘RLMObject’」というエラーが表示されてしまいます。色々調べてみてもあまりRealmの使い方が載ったサイトを見つけることができません。初歩的なことだと思いますが、どうすればデータを削除することができるでしょうか? また、テーブルを丸ごと削除するにはどうすればいいでしょうか? どなたか分かる方がいれば教えていただきたいです。すみませんが、よろしくお願いします。 import Foundation class Word: RLMObject { var id = 0 var speech = “” var word = “” override class func primaryKey() -> String { return “id” } } データの削除処理 let realm = RLMRealm.defaultRealm() realm.transactionWithBlock({ () -> Void in realm.deleteObject(Word.objectsWhere(“id == 1”)) }) —追記— 「deleteObject」を「deleteObjects」に変えて試したところエラーがなくなりコンパイルができるようになりました。しかし、いざプログラムを実行してみるとプログラムが動かなくなってしまいました。その後色々試してみてWord.objectsWhere(“speech…(Continue Reading)

Swift3でRealmを使用しListを使いたいが,Listの扱いがわからない

投稿者: Anonymous いろいろ調べてみたのですが,Listという物がどういう物なのか,その扱い方がわかりません。 RealmのDBには,subDataTableに複数のDayが 登録され,思うとおりに登録されているのですが,データの取り出し方がわかりません。 “List<subDataTable> (nt[0] subDataTable {nttID = 0;nttDay = 2017-02-12 11:16:20 +0000;nt},nt[1] subDataTable {nttID = 1;nttDay = 2017-02-12 11:16:20 +0000;nt}n)”, “List<subDataTable> (nt[0] subDataTable {nttID = 0;nttDay = 2017-02-12 11:16:20 +0000;nt},nt[1] subDataTable {nttID = 1;nttDay = 2017-02-12 11:16:20 +0000;nt}n)”) 取り出そうとすると、上記の様になってしまいます。 これを配列などで ID=0 Day=2017-02-12 11:16:20 +0000 として取り出したいのです。 どうしたら良いのか,ご教授いただけないでしょうか。 よろしくお願いいたします。 import Foundation import RealmSwift //メインデータ class…(Continue Reading)

unexpectedly found nil while unwrapping an Optional value

投稿者: Anonymous データベースに値を入れてそれをTableViewに出力しようとしたのですが、TableViewには何も表示されませんでした。なのでデータベースに入っている値を確認しようと以下のコードのprintln(“data: (wordData)”)の行でログを出力しようとすると、「unexpectedly found nil while unwrapping an Optional value」というエラーが返ってきました。これは以下のコードでは配列の中身がnilになっているという認識でよろしいでしょうか?ということはデータベースに値が入っていないということでしょうか?しかしデータベースの中身を確認できるツールで確認したところ、確かに値は入っていました。 どうすればデータベースの値を取ってくることができるでしょうか?どなたか分かる方に教えていただきたいです。すみませんが、よろしくお願いします。 func outputWord(speech: String) -> Array<String> { var wordData: [String]! = [] let wordArray = Word.objectsWhere(“speech CONTAINS %@”, speech) for item in wordArray { if let wordStore = item as? Word { wordData.append(wordStore.speech) println(“data: (wordData)”) } } return wordData } 解決 おそらく、Wordクラスのプロパティにdynamic修飾子が付いていないことが原因です。 Wordクラスの定義が下記のご質問にて書かれているものと同じだとすると、 'RLMResults'…(Continue Reading)

Realmオブジェクトの特定の列を一括で更新したい

投稿者: user41745 実現したいこと Realmを使って値をやり取りするアプリを作成しています。 Realmオブジェクトの特定の列の各値を一括で引き算したいと考えているのですが、 for文を使うよりシンプルに?記述する方法を探しており、mapメソッドが使えるのではないかと考えています。 しかしながら、mapを使う場合の記述方法がわからず困っております。 記述方法をご教示いただけないでしょうか。 (そもそもmapメソッド使えないよ、ということでしたら、その旨ご指摘いただけると幸いです) 該当のコード //例えば以下の処理で、  let realm = try! Realm()  let n = 7  let results = realm.objects(Model.self).filter("number > %@" , n) //以下のResultsが得られるとします。 /*  Results<Model> <> ( [0] Model { id = 1234; number = 8; }, [1] Model { id = 5678; number = 9; } ) */…(Continue Reading)

Realmのコレクション要素に対する検索条件の記述について

投稿者: Anonymous class Dog: Object { dynamic var name = “” dynamic var age = 0 let owners = LinkingObjects(fromType: Person.self, property: “dogs”) } class Person: Object { dynamic var name = “” let dogs = List<Dog>() } 追加したデータ realm.add(Person(value: [“AAA”, [[“taro”, 1], [“pochi”, 6]]])) realm.add(Person(value: [“BBB”, [[“kuro”, 1], [“hachi”, 6]]])) realm.add(Person(value: [“CCC”, [[“taro”, 6],…(Continue Reading)

Realmの値を上書きしたい

投稿者: Anonymous 今Swiftを使い、ボタンをタップした時の回数をカウントしてRealmに保存する作業を行っています 保存はできるのですが、タップされた回数がただ追加されるだけで、上書き方法がわかりません タップするたびに値が更新されるようにするにはどうしたらいいのでしょうか? 更新のコードをサイトで見て色々試行錯誤したのですがどれもエラーになってしまい、結局追加されるだけのコードになってしまいます 考え方?ヒントを教えていただきたいです。 var countNum = 0 @IBAction func counter(sender: AnyObject) { countNum++ var count2 = count1() count2.counter = countNum // Realmのインスタンスを取得 let realm = try! Realm() // データを追加 try! realm.write() { realm.add(count2) } } 解決 このコードですと、counter()メソッドが呼ばれるたびに新しくオブジェクトを作成して(var count2 = count1())、Realmに追加する(realm.add(count2))という処理になっています。 毎回、新しくデータが追加されるのはそのためです。 すでにRealmに保存されているデータを更新するには、 Realmから更新したいオブジェクトを取得する 1で取得したオブジェクトのプロパティを変更する という手順になります。 Realmに保存されているオブジェクトを取得するには下記のようにします。 let realm = try! Realm()…(Continue Reading)

Swift2でRealmのデータを読み出したい。

投稿者: Anonymous Realmを勉強中です。 サンプルやマニュアルを見ているのですが、いまいちわからず・・・ ID 読み 登録データ Time 1 かお (^^) 2010-01-01 00:00:00 2 かお (^^; 2010-01-01 00:00:01 上記データで、Timeでソートしながら「か」で「(^^)」と「(^^;」などのデータを読みだしたいのです。 下記コードはリスト化とソートがわからずに書いています。 そして、使った行のTimeだけ現在時刻で更新したいのです。 わかる方、教えていただけたら幸いです。 よろしくお願いいたします。 import UIKit import Foundation import RealmSwift extension String : CollectionType {} class dic: Object { dynamic var ID = 0 dynamic var yomi = “” dynamic var emoji = “” dynamic var date = NSDate(timeIntervalSince1970: 1)…(Continue Reading)

RealmSwiftのデータを全て消去したい

投稿者: Anonymous RealmSwiftを使ってデータベースアプリを作っております。 コーディングの途中でプロパティ名の変更をしたため、マイグレーション処理が必要となりました。 その際、ビルドはできてもシミュレーターを動かすと途中で落ちるようになってしまいました。 そこで、まだ開発途中なので、一旦RealmSwiftの全てのデータを消去したいと思います。 Realmブラウザを使う方法や、Xcodeからそのデータの場所を特定する方法があるようです。 解決 シミュレータ、またはデバイスから開発中のアプリケーションを削除すればファイルも一緒に消えます。 その後再インストールすればいいです。 回答者: Anonymous

Realmデータベースの暗号化を指定する場合にどちらを使えば良いかわかりません。

投稿者: Anonymous Encryption/ViewController.swiftに暗号化の設定方法が2つ記載されていますが、何か違いはあるのでしょうか? // getkeyで設定 let configuration = Realm.Configuration(encryptionKey: getKey() as Data) // 直接設定 let configuration = Realm.Configuration(encryptionKey: "1234567890123456789012345678901234567890123456789012345678901234".data(using: String.Encoding.utf8, allowLossyConversion: false)) また、getkeyで設定している場合、Realm Studio で閲覧することができませんでした。 特に違いがないようであれば、直接設定で暗号化したいと思うのですが何か問題はありますか? 解決 暗号化キーは64バイトのバイト列であればなんでもいいのでどちらのやり方でも問題ありません。 ただ、 getkeyで設定している場合、Realm Studio で閲覧することができませんでした。 ということから、おそらくgetKey()メソッドの処理を勘違いされています。 getKey()メソッドはまず最初にKeychainに保存されている暗号化キーを検索して、すでに保存されたキーがあればそれを使ってRealmを復号します。 保存されたキーがなければ(=最初にRealmファイルを作成するとき)新しく ランダムな 暗号化キーを生成して、Keychainに保存した上で戻り値として返します。 おそらくKeychainに保存する際の検索キーとしての文字列 let keychainIdentifier = "io.Realm.EncryptionExampleKey" ^ この部分を暗号化キーと勘違いされたのかと存じます。 これはKeychainの検索キーにすぎなくて、getKey()メソッドが生成する実際の暗号化キーは毎回変わるランダムなバイト列です。 このサンプルコードはおそらくそのままコードをコピーして使っても大きな問題が起こらないように実際のユースケースに即して作られています。 つまり、データを復号できるのはユーザー本人だけ、アプリの開発元はそもそも暗号化キーがわからないので(Keychainに保存されているものを確認しない限り)開発元もデータを確認できないということを前提に作られています。 回答者: Anonymous

RealmのJavaからkotlinへ書き換えたい

投稿者: Anonymous 以下の処理をkotlinで書きたいのですが ご教授のほどよろしくお願いします。 公式のDocumentを探したのですが見つけられなかったため質問させてください。 やりたいことはrealmの読み書きが発生したときの通知を実装したいです private Realm realm; private RealmChangeListener realmListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); realm = Realm.getDefaultInstance(); realmListener = new RealmChangeListener() { @Override public void onChange(Realm realm) { }}; realm.addChangeListener(realmListener); } @Override protected void onDestroy() { super.onDestroy(); // Remove the listener. realm.removeChangeListener(realmListener); // Close the Realm instance. realm.close(); } }…(Continue Reading)

InMemory Realm を利用する場合も Realm の参照、クローズを毎回行うべきか

投稿者: Anonymous InMemory Realm を利用したプロジェクトを開発しています。 class RealmSampleApplication : Application() { /** * キャッシュデータ用のRealmオブジェクト * アプリケーションクラスで保持する */ lateinit var inMemoryRealm: Realm companion object { lateinit var instance: RealmSampleApplication } init { instance = this } override fun onCreate() { super.onCreate() Realm.init(this) val config: RealmConfiguration = RealmConfiguration.Builder() .name(“inMemory.realm”) .inMemory() .build() this.inMemoryRealm = Realm.getInstance(config) Realm.setDefaultConfiguration(config) } } InMemory…(Continue Reading)

RLMResults’ does not have a member named ‘Generator

投稿者: Anonymous http://qiita.com/jtemplej/items/1c1b7204341ac01e561e 上記のサイトを参考にRealmを使い始めたのですが、for realmBook in Book.allObjects()の行で’RLMResults’ does not have a member named ‘Generator’というエラーが表示されます。何か初歩的なことが間違っているような気がするのですが、どこが間違っているのでしょうか?下記に現在のコードを記しますので、どなたか分かる方がいれば教えていただきたいです。すみませんが、よろしくお願いします。 Book.swift import Foundation import Realm class Book : RLMObject { dynamic var isbn = “” dynamic var name = “” dynamic var price = 0 } ViewController.swift import UIKit import Realm class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //…(Continue Reading)

Realm 1対多 構造でのNSData取得について

投稿者: Anonymous Realmの1対多構造を作成し、レコードにユーザのオブジェクトIDと関連づいた辞書型配列をNSDataに変換したものを保存しております。ただ、関連づいたNSDataを取得、NSDataをアンアーカイブする方法がわかりません。 class UserClass: Object { dynamic var id = 0 dynamic var user: String = “” let colorData = List<Color>() override static func primaryKey() -> String? { return “user” } } class VariousColor: Object { dynamic var colorData = NSData() let chidLink = LinkingObjects(fromType: UserClass.self, property: “colorData”) } 以下表示ViewController class ViewController: UIViewController {…(Continue Reading)