ios – 属性类型与访问者的类型不匹配

ios – 属性类型与访问者的类型不匹配,第1张

概述使用Xcode 6 Beta 4,针对iOS 8: 我一起使用Core Data和Mogenerator。如果你不熟悉“Mogen”,请跳到底部。当Mogen生成一个实体的NSManagedObject子类时,它执行以下 *** 作: @interface MyEntityID : NSManagedObjectID {}@end@interface _MyEntity : NSManagedObj 使用Xcode 6 Beta 4,针对iOS 8:

我一起使用Core Data和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,以便我们可以告诉它是一个ID为我们的_MyEntityClass的ID。

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

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

我得到这个警告:

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

好的,我明白属性是NSManagedobjectID,但是我们正在调用mogen写入的访问器方法返回MyEnytityID。即使代码完成也能识别出来。

如何看到NSManagedobject的objectID的NSManagedobjectID属性类型?@H_404_30@我应该以某种方式沉默警告吗?@H_404_30@它可能只是一个Xcode 6 Beta的东西吗? (它不会发生在Xcode 5)

什么是mogen

mogen只是为您的数据模型实体生成NSManagedobject的子类的有用工具。它有点像Xcode,但不会清除您每次重新生成子类时编写的任何自定义代码,并为您提供了一系列用于创建新实体的好方法。如果下面的条带前缀类名字还有一些新的东西,这只是mogen停止自己覆盖你写的任何自定义代码的方式。

解决方法 问题与Xcode 6 beta版本无关,但由于在iOS 8中声明objectID改变了这一事实。直到iOS 7,它被宣布为 @H_404_30@实例方法:

- (NSManagedobjectID *)objectID;

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

@property (nonatomic,Readonly,strong) NSManagedobjectID *objectID;

如http://stackoverflow.com/a/7086119/1187415中所述,您可以覆盖一个@H_404_30@实例方法在具有更专门的返回值的方法的子类中,@H_404_30@在这种情况下

- (MyEntityID *)objectID;

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

以下内容似乎与“旧”和“新”SDK兼容:@H_404_30@在“_MyEntity.h”中,替换

- (MyEntityID*)objectID;

通过

@property (nonatomic,strong) MyEntityID *objectID;

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

@dynamic objectID;

但是,这些文件总是由mogenerator重新创建的,所以这不是一个@H_404_30@令人满意的解决方案。@H_404_30@我会建议向摩根士丹利的人提交一个错误报告来寻找解决方案@H_404_30@这与iOS 8 / OS X 10.10 SDK兼容。

我找不到编译器选项来禁止这个警告(没有标记@H_404_30@“-W …”,以便“-Wno …”选项会抑制它。

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

总结

以上是内存溢出为你收集整理的ios – 属性类型与访问者的类型不匹配全部内容,希望文章能够帮你解决ios – 属性类型与访问者的类型不匹配所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1070363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存