【发布时间】:2012-07-26 16:39:33
【问题描述】:
我的每个NSManagedObject 子类都有一个类别,工厂方法位于其中,因此在自动重新生成类文件时它们不会丢失。所以我不需要知道我在运行时使用NSManagedObject 的哪个子类,每个子类的工厂方法都具有相同的名称,例如
+ (id)objectWithInfo:(NSDictionary *)info inManagedObjectContext:(NSManagedObjectContext *)context;
(为了清楚起见,在此示例中,假设有一个从 NSManagedObject 派生的实体称为 Item,生成文件 Item.m 和 Item.h,以及我自己的包含文件 Item+Factory.m 和 Item+ 的类别Factory.h,上面的方法所在的位置)。
在 Xcode 4.3 中,这不会产生警告:但 Xcode 4.4(及更高版本将其标记为警告:
(null): 元方法 'objectWithInfo:inManagedObjectContext:' in 来自 ...Item+Factory.o 的类别与来自的相同方法冲突 另一个类别
现在,我很清楚在类别中重载方法的危险,这是一件坏事。然而,我在这里所做的只是将对象视为比它们更通用的类,据我所知,这是明智的。
我做错了吗?或者有没有其他方法来声明我的方法来删除警告?
【问题讨论】:
-
另外,将类别方法添加到您不拥有的类而不添加前缀(作为命名空间)也是一种不好的形式,因为原始供应商或库供应商可能会添加此方法并导致冲突.
-
它根据字典中的信息创建一个新对象并返回它。所以对于我拥有的每个 NSManagedObject 子类,这个方法的每个实现都是不同的。你的意思是把这个方法作为猫添加到NSMO,然后在每个子猫中实现?
-
回复:前缀,是的,我是前缀,但出于隐私考虑已删除。
-
废话,是否有任何类型的查找或创建逻辑,或者它是一种直接的创建方便方法?
标签: objective-c ios xcode core-data categories