2

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

简单演示:

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

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

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

4

2 回答 2

2

existingObjectWithID:error:被显式类型转换为 return NSManagedObject*。坦率地说,这是 API 中的一个错误,您应该提交它。

因此,您将需要演员阵容。

于 2013-06-08T21:50:04.670 回答
1
@implementation MyGenericManagedObject
+ (instancetype)existingObjectByObjectID:(NSManagedObjectID *)objectID {
    return (id)[managedObjectContext() existingObjectWithID:objectID error:nil];
}

只是铸造id应该工作。

于 2013-06-08T22:00:11.213 回答