簡體   English   中英

如何在 Swift 5 中強制更新 CoreData 代碼文件(屬性擴展)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM