2017-07-30 57 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)