まず、X-Code 4.3.2 バージョンと iOS 5.1 SDK があることを確認させてください。プロジェクトでコアデータ操作に使用される以下のメソッドがあります。どちらの方法でも同じ警告が表示されます。つまり、「結果の型が 'NSManagedObject <Protocol> の関数から 'NSManagedObject *' を返す互換性のないポインター型」 .
方法 A:
- (NSManagedObject<Protocol> *)newMOforNilMOC
{
return [[NSManagedObject alloc] initWithEntity:[self entityDescription] insertIntoManagedObjectContext:nil];
}
メソッドmethod Aについては、型キャストを行って (NSManagedObject<Protocol>*) を追加しただけで、以下に示すように警告が削除されます。
- (NSManagedObject<Protocol> *)newMOforNilMOC
{
return (NSManagedObject<Protocol> *) [[NSManagedObject alloc] initWithEntity:[self entityDescription] insertIntoManagedObjectContext:nil];
}
方法 B:
+ (NSManagedObject<Protocol> *) newInContext:(NSManagedObjectContext *)context
{
return [[NSEntityDescription insertNewObjectForEntityForName:[[(NSManagedObject<Protocol> *)self class] entityName] inManagedObjectContext:context]retain];
}
メソッド Bの場合、型キャストを行うと機能しないため、メソッドの名前を newInContext から AddnewInContext (ググるとどこかで見つかります) に変更するだけで、警告が削除されます。
次の質問があります。
- 最初のメソッドに型キャストが必要な場合、2 番目のメソッドがそのソリューションで機能しないのはなぜですか?
- メソッドの名前を変更することの正確な意味は何ですか。上記の警告を削除するこの適切な方法はありますか? メソッド Bで型キャストが機能しないのはなぜ ですか?
これは複雑な問題かもしれませんが、疑問がある場合は遠慮なくコメントを残してください。違いを知りたいので、少なくともコアデータについて新しいことを学ぶことができます。