コアデータにNSArray
を保存する方法に関するサンプルコードを探していますが、運がまだありません。誰かがチュートリアルやサンプルを指しているか、この質問の答えとして簡単なサンプルを書く方がいいでしょうか?私はthisと読みましたが、NSArray
という変換可能な属性を実装する方法の例は示していません。前もって感謝します!コアデータサンプルコードでNSArrayを保存しますか?
答えて
Core DataにネイティブにNSArray
を保存しないでください。 に格納された値をの配列に変換してコアデータが使用できるものに変換し、必要に応じてNSArray
にプッシュ&プルできるようにストアにデータを保存する必要があります。
コメントなしで投票しましたか?答えが実際に間違っているわけではないので、特にあまり役に立ちません。 –
コアデータが使用できるものは、(すべてのNSArrayオブジェクトが同じクラスであると仮定して)多対多関係を介してオリジナルのエンティティに接続されているコアデータモデル内の別の「エンティティ」です。 –
質問は、NSArrayやその他の複雑なオブジェクトをコアデータに格納するための完全に適切な方法である* transformable attributes *についてです。 – quellish
フィリップの答えは正しいです。配列はコアデータに格納しません。コアデータのために作られたものに全く反対しています。ほとんどの場合、配列の情報は必要ありませんが、それはコアデータによって動的に読み込まれることがあります。コレクションの場合には、どんなプロパティの配列か、取り出された結果の配列のいずれかをNSSet
(基本的には配列にすぎません)に繰り返しても違いはありません。
ここではフィリップ氏の説明です。配列を直接格納することはできませんが、配列からプロパティリストを作成することはできます。すべてのNS配列型には、すばらしい清潔な文字列とコアデータの文字列を提供するメソッドがあります。文字列として格納されたプロパティリストのクールなことは、それらが元のものになることです。 NSString
にその方法があります。タタアア...
もちろん料金があります。 プロパティリストとしての配列は巨大化する可能性があり、RAMが限られているiOSデバイスではうまく機能しません。配列をコアデータに保存しようとすると、特に大規模データのエンティティ設計が貧弱であることが示されます。小さな配列はスピードの理由からOKです。
バイナリプロパティリストを使用することで、スペースの消費を抑えることができます。コアデータに格納されている場合やファイルシステムに直接格納されている場合は、ジップサイズに近づきます。欠点は、単にXMLやJSONファイルのように開いて読むことができないことです。開発のために私は人間が読めるものと、バイナリバージョンをリリースするものが好きです。プリプロセッサのDEBUG
値に結びついた定数がそれを処理するので、コードを変更する必要はありません。
オリジナルのポスターが投票したと仮定しないでください、すでに酸っぱいポストにタルトの味を与えます。しかし、良い説明をありがとう。 – Stunner
はい、私はこれを誤訳し、より感情的に反応しました。本当に残念です。 –
コアデータには、NSManagedObjectのインスタンスまたは同じサブクラスが格納されます。 NSManagedObject自体は辞書に非常によく似ています。オブジェクト間の多対多の関係は集合として表されます。コアデータには配列に対応する順序付きリストはありません。代わりに、コアデータストアからオブジェクトを取得するときは、フェッチ要求を使用します。フェッチ要求は、オブジェクトをソートするために使用される1つ以上のソート記述子を指定することができ、フェッチ要求によって戻されるオブジェクトは配列に格納されます。
オブジェクトの順序を保持することが重要な場合は、オブジェクトをフェッチするときにオブジェクトをソートするために使用できる属性をエンティティに含める必要があります。
本当に必要な場合は、データとしてエンコードします。 NSData(バイナリデータ)としてreceive
という新しいファイルを作成しました。 NSManagedObject実装の次に
:
-(void)setReceiveList:(NSArray*)list{
self.receive = [NSKeyedArchiver archivedDataWithRootObject:list];
}
-(NSArray*)getReceiveList{
return [NSKeyedUnarchiver unarchiveObjectWithData:self.receive];
}
True、それは文字列として保存すると良い –
私にヒントを与える良いコメント。 – tounaobun
変形可能な属性は、(例えばNSArray
など)コアデータにおけるさもなければサポートされていないオブジェクトの値を永続化するための正しい方法です。Core Data Programming Guide: Non-Standard Persistent Attributesから:
変換可能な属性の背後にある考え方は、非標準型としての属性にアクセスすることですが、舞台裏Core DataはNSDataのインスタンスにしてから、属性を変換するNSValueTransformerのインスタンスを使用しています。コアデータは、永続ストアにデータインスタンスを格納します。
transformable属性はNSValueTransformerを使用して、それ以外の場合はサポートされていないオブジェクトを永続ストアに格納します。これにより、コアデータにNSDataとして表現できるものを格納することができます。これは非常に便利です。残念ながら、変換可能な属性は述語で一致させることはできず、NSSQLiteStoreTypeで結果をソートする際に使用することもできません。つまり、変換可能な属性は、オブジェクトの検出ではなく、記憶域にのみ役立ちます。
デフォルトのトランスフォーマでは、NSCoding
(またはNSSecureCoding
)をサポートするすべてのオブジェクトを変換可能な属性として格納できます。これには、NSArray
,UIColor
,UIImage
,NSURL
,CLLocation
などが含まれます。これは、任意に大きいデータに使用することはお勧めしません。これは、ストアを照会するときにパフォーマンスに大きな影響を与える可能性があるためです。たとえば、イメージは変形可能な属性にはあまり適していません。つまり、イメージはストアを分割する大きなバイトのバイトです。その場合、Core Dataの外部レコードストレージ機能を使用するか、またはデータを別々にファイルとして保存し、そのURLをコアデータのファイルに保存する方がよいでしょう。コアデータにUIImage
を保存する必要がある場合は、関係するトレードオフを確認してください。変形属性を作成
は簡単です:Xcodeのコアデータモデルエディタで
•
は、変更する属性のモデルを選択します。右側のインスペクタで、属性タイプを「変換可能」に設定します。 「名前」フィールドは空白のままにして、デフォルトのトランスフォーマーを使用することができます。カスタムトランスを使用していた場合は、ここにクラス名を入力し、コードのどこかに+[NSValueTransformer setValueTransformer:forName:]
を使用してクラスを登録します。あなたの
NSManagedObject
サブクラスヘッダに
•正しいタイプの変形属性を記述するプロパティを宣言。我々はNSArray
を使用しているこの場合、:
@property (nonatomic, retain) NSArray *transformedArray;
•をNSManagedObject
サブクラス実装ファイルでプロパティを動的にする必要があります:
@dynamic transformedArray;
そして、あなたが行われています。 NSArray
値オブジェクトがsetTransformedArray:
に渡されると、配列はオブジェクトによって保持されます。コンテキストが保存されると、Core Dataは、モデルに記載されたNSValueTransformer
を使用してNSArray
をNSData
に変換します。 NSData
バイトは永続ストアに保存されます。
変換可能な(NSObject)をNSArrayに変換するにはどうすればよいですか? – Nil
Quellish - 素晴らしい答えですが、XCodeがモデルから提供する自動生成されたカテゴリ定義を編集することなく、変換可能なオブジェクトとしてコードブロックをカバーするための答えを広げることができますか?この場所には事実上データがありません。質問者のように、私はこれを達成する方法について完全な犠牲を払っています。あなたが気にしないなら、事前に感謝します。 – VectorVictor
@VectorVictor変換可能なオブジェクトとしてコードブロックが何を意味するのかよく分かりません – quellish
- 1. カスタムオブジェクトのNSArrayを保存する
- 2. NSArrayにはUIImages(およびその他)のNSArrayを含むNSArrayを保存します
- 3. NSArrayをUIPasteboardに保存しています
- 4. 空のNSArrayをディスクに保存します。
- 5. NSArray変数をobjective-CでCSVファイルとして保存
- 6. NSUserDefaultsは、これは私がNSArrayの保存方法です代わりにNSArray
- 7. NSArrayをNSUserDefaultsに保存してNSMutableArrayに取得する
- 8. NSArray、Plist、NSDictionary、またはデータの保存に関する推奨
- 9. PHPはリモートサーバにファイルを保存/保存しますか?
- 10. ループバック保存イベントを「保存前」操作でキャンセルします
- 11. NSArray NSDictionaryは追加オブジェクトの順序を保持します
- 12. プログラムを保存していなくてもパスワードを保存できますか?
- 13. 既存のNSArrayオブジェクトプロパティを使用して、セクション化されたテーブルビュー用の新しいNSArrayを作成します。
- 14. データを保存しないカスタムポストメタを保存します
- 15. editTextを保存します
- 16. iPhone SDK、MPMediaItemCollectionを保存しますか?
- 17. ファイルをURLから保存します。
- 18. TextViewからSharedPreferencesを保存します
- 19. Mongooseはasyncを保存しますか?
- 20. スタックを保存しますか?
- 21. CMTimeをCoreDataに保存しますか?
- 22. グラスビーパスワードをnetbeansに保存しますか?
- 23. sqlite:配列を保存しますか?
- 24. Cookie Webviewを保存しますか?
- 25. TabControlにデータを保存しますか?
- 26. データベースを保存していますか?
- 27. NSArrayはオブジェクトをコピーしますか?
- 28. NSArrayをiPhoneに保存するには、どのような方法が推奨されますか?
- 29. 保存しますが、NSManagedObjectをCoreDataに保存しないでください。
- 30. xcode NSArrayが存在し、オブジェクトを含んでいるかどうかを確認しますか?
参照してくださいhttp://stackoverflow.com/questions/29825604/how-to-save-array-to-coredata/40101654#40101654 –