gpt4 book ai didi

ios - 属性类型与访问器类型不匹配

转载 作者:技术小花猫 更新时间:2023-10-29 10:06:17 26 4
gpt4 key购买 nike

使用 Xcode 6 Beta 4,针对 iOS 8:

我正在使用核心数据和 Mogenerator一起。如果您不熟悉“Mogen”,请跳至底部。当 Mogen 为实体生成 NSManagedObject 子类时,它会这样做:

@interface MyEntityID : NSManagedObjectID {}
@end

@interface _MyEntity : NSManagedObject {}

- (MyEntityID*)objectID;

----------------------------------------------------------------------------

@implementation _MyEntity

- (KJMWorkoutID*)objectID {
return (KJMWorkoutID*)[super objectID];
}

我想这有点方便。 NSManagedObject 有一个 objectID 属性,所有 _MyEntity 所做的就是覆盖它的 getter 以返回一个 MyEntityID,这样我们就可以知道它是一个专门用于我们的 _MyEntityClass 的 ID。

所以,回到我的问题。我想通过检查两个 MyEntityID 是否不相等来比较它们:

if (![self.objectID isEqual:self.previousID])

我收到这个警告:

属性“objectID”的类型与访问器“objectID”的类型不匹配

好的,我知道该属性是 NSManagedObjectID,但我们正在调用 Mogen 编写的返回 MyEnytityID 的访问器方法。甚至代码完成也承认这一点。

怎么还是看到NSManagedObject的objectID的NSManagedObjectID属性类型?我应该以某种方式使警告静音吗?它可能只是 Xcode 6 Beta 的东西吗? (在 Xcode 5 中不会发生)

什么是摩根:

Mogen 只是一个有用的工具,可以为您的数据模型实体生成 NSManagedObject 的子类。这有点像 Xcode 所做的,但不会删除您每次重新生成子类时编写的任何自定义代码,它会为您提供一大堆用于创建新实体等的好方法。如果下栏前缀类name thing 对您来说也有一些新的东西,这就是 Mogen 阻止自己覆盖您编写的任何自定义代码的方式。

最佳答案

问题与 Xcode 6 beta 版本无关,但由于 objectID 的声明在 iOS 8 中发生了变化。直到 iOS 7,它被声明为实例方法:

- (NSManagedObjectID *)objectID;

从 iOS 8/OS X 10.10 开始,它被声明为只读属性:

@property (nonatomic, readonly, strong) NSManagedObjectID *objectID;

https://stackoverflow.com/a/7086119/1187415 中所述,你可以覆盖一个子类中的实例方法,其方法具有更专业的返回值,在这种情况下

- (MyEntityID *)objectID;

但是用更专业的返回值覆盖属性似乎是有问题的(这样做会导致与 Xcode 5 相同的警告)。

以下内容似乎适用于“旧”和"new"SDK:在“_MyEntity.h”中,替换

- (MyEntityID*)objectID;

通过

@property (nonatomic, readonly, strong) MyEntityID *objectID;

在“_MyEntity.m”中,删除- (MyEntityID*)objectID 方法并添加

@dynamic objectID;

但是,这些文件总是由 Mogenerator 重新创建,所以这不是令人满意的解决方案。我建议向 Mogenerator 人员提交错误报告以找到解决方案与 iOS 8/OS X 10.10 SDK 兼容。

我找不到抑制此警告的编译器选项(它未标记为“-W...”以便“-Wno...”选项会抑制它。

作为解决方法,您可以将self.objectID 替换为[self objectID],这样不会引起警告。

关于ios - 属性类型与访问器类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24972376/

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