首先让我确定我有 X-Code 4.3.2 版本和 iOS 5.1 SDK。我的项目中有以下用于核心数据操作的方法。两种方法都给出相同的警告。即“从结果类型为'NSManagedObject <Protocol>的函数返回'NSManagedObject *'的不兼容指针类型”。
方法一:
- (NSManagedObject<Protocol> *)newMOforNilMOC
{
return [[NSManagedObject alloc] initWithEntity:[self entityDescription] insertIntoManagedObjectContext:nil];
}
对于方法方法 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 (在谷歌搜索时在某处找到)然后警告被删除。
我有以下问题:
- 如果第一种方法需要类型转换,那么为什么第二种方法不适用于该解决方案?
- 更改方法名称的确切含义是什么。这是删除上述警告的正确方法吗?为什么类型转换在方法 B中不起作用 ?
这可能很复杂,但如果您有任何疑问,请随时发表评论。因为我想知道区别,至少我可以学习一些关于核心数据的新东西。