从同一个类的类方法中了解实例类型的最佳方法?

时间:2013-06-08 21:24:22

标签: objective-c

我想学习如何使类方法返回instancetype值,而不是id

简单演示:

@implementation MyGenericManagedObject
+ (instancetype)existingObjectByObjectID:(NSManagedObjectID *)objectID {
    return (__typeof([self alloc]))[managedObjectContext() existingObjectWithID:objectID error:nil];
}

以这种方式编写此方法,它确实有效,但是如果我删除(__typeof([self alloc])),我开始得到“不兼容的指针类型转换'NSManagedObject *'以输入'MyGenericManagedObject *'。

从同一个类的类方法中获取实例类型的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

existingObjectWithID:error:明确强制转换为NSManagedObject*。坦率地说,这是API中的一个错误,您应该将其归档。

因此,你需要演员。

答案 1 :(得分:1)

@implementation MyGenericManagedObject
+ (instancetype)existingObjectByObjectID:(NSManagedObjectID *)objectID {
    return (id)[managedObjectContext() existingObjectWithID:objectID error:nil];
}

只需转换为id即可。