Swift CoreData从JSON

时间:2017-04-13 13:05:52

标签: ios swift core-data initialization

您好我正在使用来自服务器的CoreData项目和JSON响应。我的目标是从Entity参数创建failable initializer json,该参数将首先检查entity是否已存在(通过check property" id&#34 ;与json [" id]字段进行比较。如果实体已经存在。initializer只会用json更新实体。如果实体不存在,initializer将创建一个使用json的新实体的新实体和更新属性。

如何创建可用的初始化程序?

我试过这个,但不知道它是否正确(有一些解包可选。

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
    }

}

1 个答案:

答案 0 :(得分:1)

我不相信init是寻找现有对象的正确位置。

我要做的是向Movie添加一个类func,用于查找或创建一个Movie对象,如:

/// 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)
}