Adding and initialising a new property for an existing PFObject subclass

扶醉桌前 提交于 2019-12-25 14:12:40

问题


I have an existing Parse database, with several PFObject subclasses.

If I want to add a new property to a subclass, an array for example, I add it to the PFObject subclass as an @property and declare it @dynamic in the implementation. I initialise it as empty for new objects.

@dynamic newArray; 

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

But how can I ensure this is initialised for already existing objects, as accessing this property for old objects causes a crash.

I figured I could override the getter, but I would lose all the Parse boilerplate code, and not sure that's wise. Currently I have to empty my db to ensure all new objects have the right properties. But this obviously won't work in the real world.


回答1:


This is a problem that I faced when developing my Parse application as well, but I did not have the problem of preexisting instances of the object that did not have a value for the specified key.

One solution to this problem would be to set up a cloud code job that runs through all the preexisting objects and assigns default values for the required fields. This would enable you to keep the complexity of the client to a minimum, allowing for easy updates and possibly porting to other systems.

You should also set up a beforeSave function that makes sure that all fields have a default value, and then either rejecting ones that don't or silently assigning them a default value.

My third and final recommendation (which you seem to be doing already) is to make sure the +object method properly initializes the object with all default values, in order to ensure that pinned objects (if you're using LDS) have the correct default value.



来源:https://stackoverflow.com/questions/29922776/adding-and-initialising-a-new-property-for-an-existing-pfobject-subclass

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!