我一起使用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 – 属性类型与访问者的类型不匹配所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)