10

我在我的 iOS 应用程序中使用Parse 对象存储,并为我的 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 期望我如何声明关系属性呢?

4

3 回答 3

3

现在你应该使用:

var relatedThings: PFRelation! {
    return relationForKey("relatedThings")
}
于 2015-12-17T17:12:13.507 回答
2

汤姆的回答对我不起作用,因为PFObject它不是 的子类NSManagedObject,因此它没有实现willAccessValueForKeyprimitiveValueForKeydidAccessValueForKey方法。

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

var relatedThings: PFRelation! {
    return objectForKey("relatedThings") as? PFRelation
}

您仍然需要强制转换该方法返回的值PFRelation,或者根据 Tom 的版本,将属性的类型转换为可选项。

于 2015-09-22T10:03:25.387 回答
1

以下是使用 Swift 创建只读 Core Data 属性的方法。我不知道这是否是 Parse 正在寻找的东西,但这就是在 Swift 中的工作方式。

尽管 Xcode 生成NSManagedObject带有@NSManagedon 属性的子类,但它实际上并不是必需的。可以用等效的 Swift 计算属性替换@NSManaged属性,这些计算属性使用 Core Data 原始访问器来获取/设置属性值。通过不包含设置器,您可以有效地使属性只读。

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

var relatedThings : PFRelation? {
    get {
        self.willAccessValueForKey("relatedThings")
        let things = self.primitiveValueForKey("relatedThings") as? PFRelation
        self.didAccessValueForKey("relatedThings")

        return things
    }
}

get代码的工作方式与您使用@NSManaged. 但是由于没有set,该属性是只读的。

于 2015-08-20T21:19:17.220 回答