2017-04-13 8 views
2

こんにちは私はCoreDataプロジェクトとJSONというレスポンスをサーバーから送信しています。私の目的はentityが既に(チェックプロパティ「ID」で[ "ID]フィールドをJSONに比較存在する場合最初にチェックされますjsonパラメータからEntityfailableinitializer作成することです。エンティティがすでに存在する場合。initializerのみjsonを持つエンティティを更新します。場合エンティティーが存在していなかった、initializerは新しいエンティティを作成し、jsonで新しいエンティティのプロパティを更新します。Swift CoreData JSONのエンティティを作成または更新します

我々はfailable初期化子

を作成することができますどのように誰もが知っている私はこれを試してみましたが、それは知りません正しいかどうか(オプションのアンラップをオプションにしてください。)大変感謝しています。ありがとう!

import SwiftyJSON 
import CoreData 

extension Movie { 
    struct Keys { 
     static let id = "id" 
     static let title = "title" 
    } 

    convenience init?(in context: NSManagedObjectContext!, with json: JSON?) { 

     self.init(entity: NSEntityDescription.entity(forEntityName: "Movie", in: context)!, insertInto: context) 
     guard let json = json else { 
      return nil 
     } 
     id = json[Keys.id].numberValue 
     title = json[Keys.title].string 

    } 

    func update(from json: JSON?) { 
     guard let json = json else { 
      return 
     } 

     id = json[Keys.id].numberValue 
     title = json[Keys.title].string 
    } 

} 
+0

誰でも理想的ながあります。私はどうなるのか

が見つかるか、のようなものをムービーオブジェクトを作成し、ムービーにクラスfuncを追加しているのですか? –

+0

コンパイルエラーが発生しましたか?どの行?それが何だった? –

+0

こんにちは、コンパイラエラーはありませんが、私はそれが正しいかどうかは分かりません。あなたの応答のために新しいエンティティ –

答えて

1

私はinitが既存のオブジェクトを探すのに適しているとは思っていません。

/// Returns an existing Movie if the id exists, or a new one if not. 
/// Can return nil if json is nil or missing keys 
class func findOrCreate(in context: NSManagedObjectContext!, with json: JSON?) -> Movie? { 
    // If JSON is nil, return nil 
    // (your code here) 
    // Look for an existing movie and return it if you find one 
    // (your code here) 

    // If there is no existing one call the init 
    return Movie(in: content, with: json) 
} 
+0

を作成する前に存在するオブジェクトのチェックがもう1つあります。それで私たちはこれをどう組み合わせますか?上記のイニシャライザはまだ正しいです。 findOrCreateクラスを追加するだけです。 –

+0

それは私が提案しているものです。また、必要なキーがjsonにない場合は、nilを返すことでinitを改善できます。 –

+0

こんにちは、findOrCreateの内容を助けることができます。他の機能に重複コードを入れることができます。 –

関連する問題