[英]How to force update CoreData Codefiles (Property Extension) in Swift 5?
我對 CoreData 有點困惑。 在我的xcdatamodeld
,我能夠創建新屬性並更改有關它們的一些內容,例如它們是否是可選的。
例如,我為我的實體創建了一個屬性並將其命名為 descrip ,類型是
String
並且我檢查了Optional Field
。
在其他時候,我嘗試創建該實體的新 Object 並將其安全地保存到 CoreData:
let newEntity = Entity(context: context)
newEntity.name = name
newEntity.descrip = descrip // descrip is an optional String
newEntity.filename = filename
我收到以下錯誤消息: Value of optional type 'String?' must be unwrapped to a value of type 'String'
Value of optional type 'String?' must be unwrapped to a value of type 'String'
然后,我嘗試為我的實體創建 NSManagedObjectSubclasses。 我發現,雖然所有屬性都已添加並且所有的類型都設置正確,但是? 表明該屬性的可選性完全搞砸了。
import Foundation
import CoreData
extension Entity {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Entity> {
return NSFetchRequest<Entity>(entityName: "Entity")
}
@NSManaged public var name: String? // Should not be optional and was set so in xcdatamodeld
@NSManaged public var descrip: String // Should be optional and set to optional in xcdatamodeld
@NSManaged public var filename: String
}
有沒有辦法強制更新這個代碼文件? 或者我如何使用可選字符串來填寫我的新實體的可選值?
該分配中的錯誤不是核心數據問題,而是純粹的 Swift。 您已將descrip
聲明為String
,但您正在嘗試分配一個String?
價值。 這在 Swift 中是不合法的——你必須先解開一個可選項,然后再將它分配給非可選項。 如果您不使用 Core Data,情況也是如此。 例如,這將產生相同的錯誤:
let foo: String? = "hello"
let bar: String = foo
數據 model 和生成的代碼之間存在差異,因為 Swift 選項和 Core Data 選項是完全不同的東西。 Core Data 只關心保存更改時是否有可選內容。 Swift 始終關心某些東西是否是可選的。 這是不同的,因為 Core Data 在 Swift 存在之前已經存在了很長時間,所以它並不總是與 Swift 的預期相匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.