我的应用程序的各个部分都有以下代码:
MyPFObjectSubclass *instance = [MyPFObjectSubclass object];
instance.myMutableArray = [NSMutableArray array];
instance.myMutableDictionary = [NSMutableDictionary array];
我经常忘记初始化这些类型,并且在稍后尝试setValue:forKey
或addObject
方法时遇到问题。
我承认,这很好,但我想谨慎行事,如果可能的话,将这些初始化滚动到+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
方法不应该被子类覆盖。