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 に答える