2014-12-10 16 views
2

我有一個字段存儲在一個名爲「metadata」的核心數據對象中,該對象的類型爲String(不可選,因爲Apple文檔不會與CD中的optionals混淆) 。有時,元數據字段爲零。在檢查該值是否是零,我做以下檢查:Swift - 將一個零核心數據字符串作爲一個可選值

if object.metadata as String? != nil { 
    ... 
} 

然而,我的代碼一直在這條線爲EXC_BAD_ACCESS崩潰。我也試過:

if let metadata = object.metadata as String? { 
    ... 
} 

哪一個也不行。我在我的代碼的其他部分成功地將對象投射到可選項,所以我不明白爲什麼這個特殊情況不起作用。你如何檢查覈心數據屬性是否爲零字符串?

+0

可能有助於看到崩潰的更多細節。可能與鑄造無關,而與對象及其分配無關。另外,當你說你已經在你的代碼的其他部分成功鑄造了對象時,他們是否也是字符串?每次都是撞車嗎? – shim 2014-12-10 22:16:18

+0

@shim是 - 事實上,完全相同的屬性。我有這個屬性的三個對象。前兩個不是零,它通過罰款。最後一個是零,這就是它崩潰的地方 – user3781236 2014-12-10 22:19:05

+0

也許發佈NSManagedObject子類文件? – shim 2014-12-10 22:20:03

回答

5

看起來你真正想要的是這樣的:

if object.metadata != nil { 
    ... 
} 

或本:

if let metadata = object.metadata as? String { 
    // You can now freely access metadata as a non-optional 
    ... 
} 

- 編輯 -

我的錯,我沒看過你的問題的第一部分足夠徹底。它看起來像重複的答案有這個解決方案。從本質上講,生成的託管對象子類是一個錯誤,您應該修改屬性爲可選或隱式解包。您可以使用第一種方法隱式解開,第二種選擇可選項。

有幾個問題討論了生成的子類不生成可選屬性的問題。我不會太在意編輯子類;除了蘋果讓它更容易創建它們之外,沒有什麼特別的。

Check if property is set in Core Data?

Swift + CoreData: Cannot Automatically Set Optional Attribute On Generated NSManagedObject Subclass

--Edit2--

如果你真的不想碰你可以訪問使用valueForKey()財產,並可以添加,作爲子類如果你想要一些更清潔的東西,可以擴展。

if let metadata = object.valueForKey("metadata") as String? { 
    ... 
} 

在擴展中:

extension ObjectClass { 
    var realMetadata: String? { 
     set { 
      self.setValue(newValue, forKey: "metadata") 
     } 
     get { 
      return self.valueForKey("metadata") as String? 
     } 
    } 
} 
+0

我已經試過了。首先,錯誤是:**類型'NSString'不符合協議'NilLiteralConvertible'**。第二,錯誤是:**從'字符串'到'字符串'的條件降頻總是成功** – user3781236 2014-12-10 22:34:29

+0

你確定嗎?注意在他的回答中的問號位置和我的評論相比,您提供的代碼 – Ian 2014-12-10 22:37:33

+0

,並從第二個錯誤中獲得的錯誤,聽起來像object.metadata根本不是可選的,所以如果您提供對象它可能對我們幫助你的問題有用 – Ian 2014-12-10 22:39:00

相關問題