为现有的 PFObject 子类添加和初始化一个新的 属性

Adding and initialising a new property for an existing PFObject subclass

我有一个现有的 Parse 数据库,其中有几个 PFObject 子类。

如果我想向子类添加一个新的 属性,例如一个数组,我将它作为 @属性 添加到 PFObject 子类,并在实现中将其声明为 @dynamic。对于新对象,我将其初始化为空。

@dynamic newArray; 

+ (instancetype)object
{
    MyObject *myObject = [super object];
    myObject.newArray = [NSMutableArray array];
    return myObject; 
}

但是我怎样才能确保为已经存在的对象初始化它,因为为旧对象访问这个 属性 会导致崩溃。

我想我可以覆盖 getter,但我会丢失所有 Parse 样板代码,并且不确定这样做是否明智。目前我必须清空我的数据库以确保所有新对象都具有正确的属性。但这显然在现实世界中行不通。

这也是我在开发 Parse 应用程序时遇到的问题,但我没有遇到没有指定键值的对象的预先存在实例的问题。

此问题的一个解决方案是设置一个云代码作业,该作业遍历所有预先存在的对象并为必填字段分配默认值。这将使您能够将客户端的复杂性保持在最低限度,从而允许轻松更新并可能移植到其他系统。

您还应该设置一个 beforeSave 函数,以确保所有字段都具有默认值,然后拒绝那些没有默认值的字段或默默地为它们分配默认值。

我的第三个也是最后一个建议(您似乎已经在做)是确保 +object 方法使用所有默认值正确初始化对象,以确保固定对象(如果您使用的是 LDS ) 具有正确的默认值。