1. ホーム
  2. ios

[解決済み] ArrayをCoreDataに保存するには?

2022-08-21 18:53:03

質問

Core Dataに配列を保存したい。

let array = [8, 17.7, 18, 21, 0, 0, 34]

その配列の中の値、個数は可変です。

1. NSManagedObjectクラスの内部では何を宣言すればよいのでしょうか?

class PBOStatistics: NSManagedObject, Equatable {
    @NSManaged var date: NSDate
    @NSManaged var average: NSNumber
    @NSManaged var historicAverage: NSNumber
    @NSManaged var total: NSNumber
    @NSManaged var historicTotal: NSNumber
    @NSManaged var ordersCount: NSNumber
    @NSManaged var historicOrdersCount: NSNumber
    @NSManaged var values: [Double]  //is it ok?

    @NSManaged var location: PBOLocation

}

2. .xcdatamodelの内部で何を宣言すればよいのでしょうか?

3. これをEntityに保存するにはどうしたらよいですか?

(私はMagicalRecordを使用しています)

let statistics = (PBOStatistics.MR_createInContext(context) as! PBOStatistics)
statistics.values = [8, 17.7, 18, 21, 0, 0, 34] //is it enough?

どのように解決するのですか?

OK、私はいくつかの研究とテストを行いました。使用方法 トランスフォーマブル を使えば、解決は簡単です。

1. NSManagedObjectクラス内で何を宣言すればよいのでしょうか?

@NSManaged var values: [NSNumber]  //[Double] also works

2. .xcdatamodelの内部で何を宣言すればよいのでしょうか?

Transformable のデータ型です。

3. これをEntityに保存するにはどうしたらよいですか?

statistics!.values = [23, 45, 567.8, 123, 0, 0] //just this

"NSArrayまたはNSDictionaryをtransformable属性として格納することができます。これは、NSCodingを使用して配列または辞書をNSData属性にシリアライズします(そして、アクセス時に適切にデシリアライズします)" - 。 ソース

または として宣言したい場合 バイナリデータ と宣言したい場合は、次のように読みます。 簡易記事 :