2017-07-30 58 views
1

我面臨一個問題,我無法通過init(value: Any)設置一個被忽略的屬性。我理解被忽略的屬性的方式是它們存在於Object的一個實例中,並且一旦該對象被持久化到Realm,它們將被忽略,但它似乎在初始化期間已被忽略。模型的忽略屬性似乎沒有使用init(值:任何)設置

例子:

型號

class Image: Object { 

    dynamic var main = false 
    dynamic var image: UIImage? 

    override static func ignoredProperties() -> [String] { 
     return ["image"] 
    } 
} 

用法:

let img = Image(value: [PROPERTY.MAIN: imageSlot.imageInfo.main, PROPERTY.IMAGE: imageSlot.imageInfo.image]) 
img.image // NIL HERE 

let img = Image(value: [PROPERTY.MAIN: imageSlot.imageInfo.main]) 
img.image = imageSlot.imageInfo.image 
img.image // CORRECTLY SET 

這僅僅是一個有點討厭,我不能把它已在init(價值:任何),因此我想知道這是否是一種預期的行爲,或者我做錯了什麼。

+0

是的,你可以將其設置在初始化。向我們展示您所寫的初始化程序,以便我們可以看到出錯的地方。這應該很容易解決。 - 凱爲你提供了一個非常好的解決方案。 – Mozahler

+0

@Mozahler你提到的答案是事實錯誤的,並且已被其作者刪除。 OP使用'Realm'使用的默認初始化程序,它不是由OP編寫的自定義初始化程序。 –

+0

我明白,OP沒有使用自定義初始值設定項。我認爲這是必需的。這就是爲什麼我要求他提供代碼。感謝您的更新。 – Mozahler

回答

0

這是目前的預期行爲。初始化程序Object.init(value:)此時僅考慮持久性屬性的鍵。

https://github.com/realm/realm-cocoa/issues/3495

解決的辦法是,你可以這樣定義init(main: Bool, image: UIImage?)定製的初始化。

class Image: Object { 
    dynamic var main = false 
    dynamic var image: UIImage? 

    convenience init(main: Bool, image: UIImage?) { 
     self.init() 
     self.main = main 
     self.image = image 
    } 

    override static func ignoredProperties() -> [String] { 
     return ["image"] 
    } 
} 

然後你可以使用它像下面這樣:

let img = Image(main: imageSlot.imageInfo.main, image: imageSlot.imageInfo.image)