第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在核心數(shù)據(jù)中使用swift 4 Codable?

如何在核心數(shù)據(jù)中使用swift 4 Codable?

小怪獸愛吃肉 2019-09-21 11:22:24
可編碼似乎是一個非常令人興奮的功能。但是我想知道我們?nèi)绾卧诤诵臄?shù)據(jù)中使用它?特別是,是否可以直接從NSManagedObject編碼JSON或從其解碼JSON?我嘗試了一個非常簡單的示例:并定義了Foo自己:import CoreData@objc(Foo)public class Foo: NSManagedObject, Codable {}但是當(dāng)這樣使用它時:let json = """{    "name": "foo",    "bars": [{        "name": "bar1",    }], [{        "name": "bar2"    }]}""".data(using: .utf8)!let decoder = JSONDecoder()let foo = try! decoder.decode(Foo.self, from: json)print(foo)編譯器因以下錯誤而失敗:super.init isn't called on all paths before returning from initializer而目標(biāo)文件是定義的文件 Foo我想我可能做錯了,因為我什至沒有通過NSManagedObjectContext,但是我不知道該貼在哪里。核心數(shù)據(jù)是否支持Codable?
查看完整描述

3 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗 獲得超4個贊

CoreData是其自己的持久性框架,根據(jù)其詳盡的文檔,您必須使用其指定的初始化程序,并遵循相當(dāng)特定的路徑來創(chuàng)建和存儲對象。

您仍然可以像使用Codable一樣以有限的方式使用它NSCoding。

一種方法是使用這兩種協(xié)議之一解碼對象(或結(jié)構(gòu)),然后將其屬性轉(zhuǎn)移到NSManagedObject您根據(jù)Core Data文檔創(chuàng)建的新實例中。

另一種方法(非常常見)是僅對要存儲在托管對象屬性中的非標(biāo)準(zhǔn)對象使用一種協(xié)議?!胺菢?biāo)準(zhǔn)”是指不符合模型中指定的Core Data的標(biāo)準(zhǔn)屬性類型的任何內(nèi)容。例如,NSColor不能將它直接存儲為托管對象屬性,因為它不是CD支持的基本屬性類型之一。相反,您可以用于NSKeyedArchiver將顏色序列化為一個NSData實例,并將其作為Data屬性存儲在托管對象中。用逆轉(zhuǎn)此過程NSKeyedUnarchiver。這很簡單,使用Core Data可以有更好的方法(請參見Transient Attributes),但這說明了我的觀點(diǎn)。

您也可以想象采用Encodable(組成的兩個協(xié)議之一Codable-您能猜出另一個的名稱嗎?)將托管對象實例直接轉(zhuǎn)換為JSON以進(jìn)行共享,但是您必須指定編碼鍵和自己的自定義encode實現(xiàn),它不會由編譯器使用自定義編碼鍵自動合成。在這種情況下,你要指定唯一要列入鍵(屬性)。

希望這可以幫助。


查看完整回答
反對 回復(fù) 2019-09-21
?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗 獲得超6個贊

Swift 4.2:

按照casademora的解決方案,


guard let context = decoder.userInfo[.context] as? NSManagedObjectContext else { fatalError() }


應(yīng)該


guard let context = decoder.userInfo[CodingUserInfoKey.context!] as? NSManagedObjectContext else { fatalError() }。


這樣可以防止Xcode錯誤地將其識別為數(shù)組切片問題。


編輯:使用隱式解包的可選選項,無需.context每次使用時都強(qiáng)制解開。


查看完整回答
反對 回復(fù) 2019-09-21
  • 3 回答
  • 0 關(guān)注
  • 653 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號