簡體   English   中英

Xcode NSManagedObject 子類在標記為非可選時包含可選

[英]Xcode NSManagedObject subclass contains optionals when they are marked as non-optional

我有一個名為 Film 的核心數據實體,它具有屬性標題和日期。 我注意到生成的 NSManagedObject 子類包含可選的 NSManaged 屬性,即使我在核心數據檢查器中將這些屬性標記為非可選。

在此處輸入圖片說明

在此處輸入圖片說明

我可以手動將其更改為非可選屬性還是將其保留為可選屬性是更好的選擇? 為什么?

“可選”對 Core Data 的意義不同於對 Swift 的意義。

  • 如果 Core Data 屬性不是可選的,則在保存更改時它必須具有非 nil 值。 在其他時候,Core Data 並不關心該屬性是否為 nil。
  • 如果斯威夫特屬性是不可選的,初始化完成之后,它必須在任何時候都非零值。

將 Core Data 屬性設為非可選並不意味着它在 Swift 術語中是非可選的。 這就是為什么生成的代碼使這些屬性成為可選的——就 Core Data 而言,擁有 nil 值是合法的,除非保存更改。

這是一個已知的問題。 有些人將其更改為非可選且沒有不利影響,我保持其生成方式並希望早日修復。

如果您向 Apple 提交錯誤以提高可見性和優先級,這總是有幫助的。

創建 managedobject 類並將實體類類型更改為手動並將這些類添加到您的項目范圍。

編輯您的 managedObject 使它們成為非可選的。 這意味着您需要自己維護這個類並在核心數據模型和類中進行任何更改

如果您的數據模型穩定且不會更改,那么您可以使用它。

數據模型檢查器中的 Optional 復選框與 Swift 選項無關。 該復選框確定是否需要屬性具有值。

如果取消選擇屬性的可選復選框,則必須為該屬性指定一個值,否則保存時會出錯。 通過選擇 Optional 復選框,您可以在不給屬性值的情況下進行保存。 假設您有一個字符串的 description 屬性。 如果您選擇了 Optional 復選框,您可以將描述留空並仍然保存實體。

這是另一個例子。 假設您有文本字段,讓一個人輸入他們的家庭、工作和手機號碼。 這些電話號碼應該是可選屬性。 您不希望僅僅為了保存此人的數據而要求某人擁有家庭電話號碼、工作電話號碼和手機號碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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