2016-11-22 10 views
3

新しいSwift 3 iOSアプリを開発中にRealmを数日間使用していましたが、全体としてCoreDataよりもはるかに楽しいです。Realm()はどのように機能しますか?

しかし、ドキュメンテーションは私が正確に何...

let realm = try! Realm() 

を見つけ出す手助けするのに十分な詳細ではありません...ん、それは理にかなっている(あるいは必須である)かどうかにこの行の複数のバージョンを使用するか、アプリケーション全体に対して1回の呼び出しで十分な場合

だから、レルムの知識があれば誰でも助けてくれれば幸いです。

私の質問、重要度の順に:

  1. 上記のコード行が正確に何をしますか?何らかの種類のファイルマネージャーストリームを開いて、アプリケーションが実行されている限り、アプリケーションがRealmデータファイルへの書き込みと読み取りを許可しますか?

  2. また、すべての領域の読み取り/書き込み操作の前にこの行を使用する必要がありますか?または、すべての別のクラス/ビューコントローラで呼び出される必要があるが、すべての読み取り/書き込みアクションの前に呼び出される必要がないなど、2つの極端な状況の間にあるのだろうか?

  3. なぜレルムはすべての方法でtry!を使用しますか?これは、さまざまなチュートリアルやサンプルのソースファイルの簡略化されたデモンストレーション用ですか?あるいは、実際にRealmを使用しているときのようなエラーを抑制することを意味していますか?レルムのドキュメントとサンプルファイルは、私は可能性がある、盲目だ場合を除き、これらの質問への答えを提供していないようだと

は、任意およびすべての入力をお願い申し上げ、私はあることに開いています該当する場合は関連するドキュメンテーション/参照ページを指しています。

答えて

1

おかげで起こる場合は処理するためにdocatchと結合!ドキュメントをより明確にすることを検討します。その間、

  1. このコード行は、レルムのインスタンスrealmを提供します。特に、Realm()は、デフォルトのレルムを提供します。これは、単にデフォルトの設定オブジェクトを使用して設定が指定されているレルムです。(あなたのアプリケーションにただ1つのレルムがある場合は、この構造体を明示的に渡すことなく、このAPIを使用して参照を取得することができます)。このインスタンスでは、他のSwiftオブジェクト、またはRealm引数を必要とする他のAPIに渡します。
  2. 普通のオブジェクトと同じようにrealmインスタンスを使用してください。ストリームやその他の非表示状態について心配する必要はありません。唯一の制限は、スレッドまたはキュー間にRealmのインスタンスを渡すべきではないということです。
  3. try!は、主に簡潔にするためのものです。プロダクションアプリがtry!を使用しないようにする必要があるかどうかは、レルムのオープンに失敗したことからリカバリすることが合理的に期待できるかどうか、レルムがオープンできない場合に特別な動作が必要かどうかによって異なります。考えられるエラーhereを見ることができます。

最後の注意:Realm(ディスク上のデータベース)とSwiftのRealmクラスのインスタンスの重要な違いがあります。複数のRealmインスタンスは、同じ構成値で作成された場合、同じ基礎となるRealmデータベースを参照することがあります。たとえば、アプリケーションの異なる部分に複数のRealmインスタンスが存在する場合や、異なるスレッド(上で説明した同じスレッド要件を満たす場合)のインスタンスがあるとします。ユーザーの中には、起動時に特定のレルムを開き、発生する可能性のあるエラーを処理し、データベースからの読み取りまたは書き込みが必要なUIコードへのRealmインスタンスを提供する「マネージャー」シングルトンオブジェクトの作成を選択するユーザーもいます。このパターンがあなたに合っているかどうかは、コーディングスタイルとアプリの特定のニーズに依存します。

希望に役立ちます!

0

私の知識のベースが、実際には正しくない可能性があります:

  1. コード行は、あなたがレルムに呼びかけている。この場合には、現在のスレッドで読むレルム書き込みを/制御するために、レルムのインスタンスを作成します。デフォルトの設定では、データベース名、パスなどの別の設定が必要な場合は設定を変更できます。
  2. 現在のクラスで作成したか、デフォルトのRealm()を使用している限り、それを必要としますが、それをクラス変数などにすることができます
  3. tryは、あなたがそれを処理するかどうか、あなたがしたい場合は、try!を使用すると、あなたがエラーをスキップする意味処理できること、エラーがレルムを使用するための