gpt4 book ai didi

iphone - NSManagedObject 不兼容的指针类型警告

转载 作者:行者123 更新时间:2023-12-03 21:16:54 25 4
gpt4 key购买 nike

首先让我确保我有 X-Code 4.3.2 版本和 iOS 5.1 SDK。我在我的项目中使用以下方法进行核心数据操作。两种方法都会发出相同的警告。即“从结果类型为“NSManagedObject ”的函数返回“NSManagedObject *”的不兼容指针类型”

方法A:

- (NSManagedObject<Protocol> *)newMOforNilMOC 
{
return [[NSManagedObject alloc] initWithEntity:[self entityDescription] insertIntoManagedObjectContext:nil];
}

对于方法方法A,我只是进行类型转换并添加(NSManagedObject *),然后警告被删除,如下所述。

- (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 (在谷歌搜索时找到),然后警告就被删除了。

我有以下问题:

  1. 如果第一种方法需要类型转换,那么为什么第二种方法不能使用该解决方案?
  2. 更改方法名称的确切含义是什么?这是删除上述警告的正确方法吗?为什么类型转换不起作用方法B

这可能很复杂,但如果您有任何疑问,请随时发表评论。因为我想知道其中的区别,至少我可以学到一些关于核心数据的新东西。

最佳答案

我认为您在类方法中使用“self”。您应该使用类本身。让我用代码来展示

+ (NSManagedObject<Protocol> *) newInContext:(NSManagedObjectContext *)context 
{
//Usage of [self class] is not correct, as self points already to a class.
NSEntityDescription* desc = [NSEntityDescription entityForName:@"myObjectName" inManagedObjectContext:context];
return [[NSEntityDescription insertNewObjectForEntityForName:desc inManagedObjectContext:context]retain];
}

您无法将类类型转换为“id”类型,如果您位于对象方法而不是类方法中,则 self 会指向该类型。我认为任何方法重命名都不能解决任何警告。

关于iphone - NSManagedObject 不兼容的指针类型警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com