2017-04-13 70 views
2

嗨,我是用CoreData項目,並從服務器JSON響應工作更新實體。我的目標是創建一個Entityfailableinitializerjson參數,它首先會檢查entity已經存在(通過檢查屬性「ID」比較JSON [「ID]字段,如果實體已經存在。在initializer將只與json更新實體。如果實體不存在,則initializer將創建一個新的實體和更新的新實體的屬性與json斯威夫特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

任何人有理想是什麼? –

+0

您是否收到編譯器錯誤?什麼線?它以前如何? –

+0

喜不存在編譯器錯誤,但我不知道它的正確與否。還有一兩件事沒有對檢查對象存在之前創建新的實體 –

回答

1

我不認爲init是尋找現有對象的正確位置。

我會做的是添加一個類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) 
} 
+0

感謝您的答覆。所以我們如何結合這一點。上述初始化程序仍然正確。我們只需要添加一個類func findOrCreate? –

+0

這就是我的建議。另外,如果json沒有你需要的鍵,你可以通過返回nil來改進你的init。 –

+0

您好可以幫助findOrCreate的內容。似乎會有一些重複的內部比較初始化 –