在Swift中为Parse的PFRelation声明一个只读的@NSManaged属性

时间:2015-08-17 00:25:18

标签: ios swift core-data parse-platform pfrelation

我在iOS应用程序中使用Parse object store,我为Parse对象创建了一个自定义子类,看起来有点像这样:

class MyThing: PFObject, PFSubclassing {

   // ...PFSubclassing protocol...

   @NSManaged var name: String
   @NSManaged var somethingElse: String
   @NSManaged var relatedThings: PFRelation

 }

relatedThings属性有效:我可以从商店中获取相关对象。但是,我不断收到Parse的警告:

[Warning]: PFRelation properties are always readonly,
but MyApp.MyThing.relatedThings was declared otherwise.

在Objective-C中,我可以轻松地将该属性标记为只读,但我不确定如何在Swift中执行此操作以使警告静音。

let不允许使用var代替@NSManaged

添加private(set)也没有效果:

@NSManaged private(set) var relatedThings: PFRelation

那么Parse如何期望我宣布关系属性呢?

3 个答案:

答案 0 :(得分:3)

现在你应该使用:

var relatedThings: PFRelation! {
    return relationForKey("relatedThings")
}

答案 1 :(得分:2)

Tom's answer对我不起作用,因为PFObject不是NSManagedObject的子类,因此它没有实现willAccessValueForKey,{{1} }和primitiveValueForKey方法。

但是,使用didAccessValueForKey自己的PFObject方法是正确的等效解决方案:

objectForKey

您仍然需要强制转换方法返回到var relatedThings: PFRelation! { return objectForKey("relatedThings") as? PFRelation } 的值,或者根据Tom的版本,将属性的类型转换为可选项。

答案 2 :(得分:1)

以下是您如何使用Swift创建只读Core Data属性。我不知道这是否是Parse正在寻找的东西,但它是如何在Swift中起作用的。

虽然Xcode在属性上生成>> C C = [3x1 double] [3x1 double] [ 4] [2x1 double] >> celldisp(C) C{1} = 1 6 8 C{2} = 2 3 7 C{3} = 4 C{4} = 5 9 NSManagedObject子类,但实际上并不需要它。用等效的Swift计算属性替换@NSManaged属性,使用Core Data原语访问器来获取/设置属性值,这很好。您不通过不包含设置器就可以使该属性有效

这意味着用以下内容替换现有的@NSManaged声明:

relatedThings

var relatedThings : PFRelation? { get { self.willAccessValueForKey("relatedThings") let things = self.primitiveValueForKey("relatedThings") as? PFRelation self.didAccessValueForKey("relatedThings") return things } } 代码与使用get时的代码相同。但由于没有@NSManaged,该属性是只读的。