2017-03-08 3 views
0

私はコアデータを使用しています。私のプロパティを読み込もうとすると、それらは0や1などの数値として読み込まれます。セットアップ。私の最終的な目標は真偽にブール値を保存し、それをそのまま読むことです。セットアップで何か間違っているのか、何か不足していますか?私は投稿 iPhone: Save boolean into Core Dataを見てきましたが、OBJ Cのほかに、データモデルのオプションでブール値が利用できると思います。私はコアデータを使用しており、私のブール値は数値として読み込まれています

func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){ 
    let context = getContext() 

    let entity = NSEntityDescription.entity(forEntityName: "FilterCoreDataObj", in: context) 
    let transc = NSManagedObject(entity: entity!, insertInto: context) 

    //SET ENTITY VALUES 

    transc.setValue(bathAny, forKey: "bathAny") 
    transc.setValue(bath1, forKey: "bath1") 
    transc.setValue(bath2, forKey: "bath2") 
    transc.setValue(bath3, forKey: "bath3") 
    transc.setValue(bath4, forKey: "bath4") 


    do { 
     try context.save() 
     print("saved") 
    } catch let error as NSError { 
     print("could not save \(error), \(error.userInfo)") 
    } catch { 

    } 
} 

読むのFunc

func getTranscriptions(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool) { 
    let fetchRequest: NSFetchRequest<FilterCoreDataObj> = FilterCoreDataObj.fetchRequest() 

    do { 
     let searchResults = try getContext().fetch(fetchRequest) 
     print("num of results = \(searchResults.count)") 
     for trans in searchResults { 
      print("bath 1 \(trans.value(forKey: "bath1"))") 


     } 


    } catch { 
     print("Error with request: \(error)") 
    } 

} 
+2

可能な複製の[iPhone:ブーリアンをコアデータに保存](0120-18751) – keithbhunter

+0

これはすばやく、コアデータが変更されました。 lotをSwift 3に追加しました。また、datModelでは、プロパティをブール値 –

答えて

2

あなたが属性を選択した場合、その後、あなたはBoolを直接操作することができます「を使用するスカラー型」オプションがある「データモデルインスペクタ]タブを開きます型の代わりにNSNumberの値を使用します。

enter image description here

私は、これは、箱から出して動作します(自動管理オブジェクトのサブクラスを生成して)スウィフト3でそれを確認することができます。

独自のNSManagedObjectサブクラス(または拡張子)を作成する場合は、プロパティを公開する必要があります。

p.s.副次的なことに、私はあなたが現在NSManagedObjectsのサブクラスや拡張機能を使用していないことを推測しています。 CoreDataを初めて使用している場合は、CoreDataツールがXcode 8で大幅に変更されたため、混乱する可能性があります。

簡単な紹介として、エンティティ(またはXcodeで自動的に生成されます)。あなたのケースでは

拡張子は次のようになります。あなたは、キーのパスの文字列を使用するのではなく、直接プロパティにアクセスすることができますので、その後、エンティティを使用して

extension FilterCoreDataObj { 
    @NSManaged public var bathAny: Bool 
    @NSManaged public var bath1: Bool 
    @NSManaged public var bath2: Bool 
    @NSManaged public var bath3: Bool 
    @NSManaged public var bath4: Bool 
} 

非常に簡単になった:

func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){ 

    let context = getContext() 

    let transc = FilterCoreDataObj(context: context) 
    //SET ENTITY VALUES 

    transc.bathAny = bathAny 
    transc.bath1 = bath1 
    transc.bath2 = bath2 
    transc.bath3 = bath3 
    transc.bath4 = bath4 

    do { 
     try context.save() 
     print("saved") 
    } catch let error as NSError { 
     print("could not save \(error), \(error.userInfo)") 
    } catch { 

    } 
} 
+0

人生の節約に感謝します! –

+0

コアデータに関するもう1つの質問に答えることができるかどうかは疑問でした。だから私はコアデータを持つカスタムオブジェクトの配列を保存しようとしています。カスタムオブジェクトは既に存在していますが、私はそれらを記述して保存する方法についてはわかりません。カスタムオブジェクトを保存するだけですか?もしそうなら、それは属性ですか?そして私はそのタイプをどのように変更しましたか?または、そのオブジェクトのクラスを作成し、そのオブジェクトに存在するものと一致するようにすべての属性を設定しますか?ご協力ありがとうございました。私はあなたがそこに答えることができるようにしたいなら、別の質問でこれを開きます。 –

+0

独自のCoreDataエンティティとしてカスタムオブジェクトをモデル化したくない場合は、 'transformable'属性を使用してカスタムオブジェクトを保存することができます。ここでの簡単な答えは、カスタムオブジェクトに 'N​​SCoding'プロトコルを実装させ、コアデータストアがオブジェクトをバイナリBLOBに変換して格納できるようにすることです。関連する質問を見つけようとしましたが、驚いたことに(スウィフトのために)依頼されていません。 – MathewS

関連する問題