如何为PFObject子类自动初始化可变数组/字典?(Parse.com框架)



我的应用程序的各个部分都有以下代码:

MyPFObjectSubclass *instance = [MyPFObjectSubclass object];
instance.myMutableArray = [NSMutableArray array];
instance.myMutableDictionary = [NSMutableDictionary array];

我经常忘记初始化这些类型,并且在稍后尝试setValue:forKeyaddObject方法时遇到问题。

我承认,这很好,但我想谨慎行事,如果可能的话,将这些初始化滚动到+object中。

我的PFObject子类大致如下。我调用[MyPFObject-tlObject]来创建一个新实例。

@implementation MyPFObject 
@dynamic objectUUID;
// Other fields
+ (MyPFObject*) tlObject
{
    MyPFObject* obj = [self object];
    [obj tlObjectInit];
    // Other initializations
    return obj;
}
+ (NSString*) parseClassName
{
    return @"MyPFObject";
}
+ (PFQuery*) query
{
    PFQuery* query = [PFQuery queryWithClassName: [self parseClassName]];
    // Add includeKeys here
    return query;
}
@end

我在PFObject上有一个包含tlObjectInit的类别。字段objectUUID在那里,这样我就有了一个值,可以在保存对象之前唯一地标识对象。这是必要的,因为我有时会创建相互引用的对象集。在保存之前,不会设置分析对象ID。

@implementation PFObject (TL)
- (void) tlObjectInit
{
    NSString* format = [[self parseClassName] stringByAppendingString: @"-%@"];
    [self setObject: [NSUUID uuidStringInFormat: format]
             forKey: @"objectUUID"];
}
// Add other initializations here
@end

MyPFObjectSubclass中,重写init方法:

-(instancetype) init
{
  if (self = [super init])
    {
       _myMutableArray = [NSMutableArray array];
       _myMutableDictionary = [NSMutableDictionary dictionary];
    }
  return self;
}

我猜您的object方法以某种方式调用init方法。

编辑:看起来您使用的是Parse框架。如参考中所述,PFObject init方法不应该被子类覆盖。

最新更新