ios – 属性类型与访问者的类型不匹配
使用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属性类型? 什么是Mogen Mogen只是为您的数据模型实体生成NSManagedObject的子类的有用工具。它有点像Xcode,但不会清除您每次重新生成子类时编写的任何自定义代码,并为您提供了一系列用于创建新实体的好方法。如果下面的条带前缀类名字还有一些新的东西,这只是Mogen停止自己覆盖你写的任何自定义代码的方式。 解决方法
问题与Xcode 6 beta版本无关,但由于在iOS 8中声明objectID改变了这一事实。直到iOS 7,它被宣布为
实例方法: - (NSManagedObjectID *)objectID; 从iOS 8 / OS X 10.10开始,它被声明为只读属性: @property (nonatomic,readonly,strong) NSManagedObjectID *objectID; 如http://stackoverflow.com/a/7086119/1187415中所述,您可以覆盖一个 - (MyEntityID *)objectID; 但似乎有一个问题是覆盖一个更专业的返回值的属性 以下内容似乎与“旧”和“新”SDK兼容: - (MyEntityID*)objectID; 通过 @property (nonatomic,strong) MyEntityID *objectID; 并在“_MyEntity.m”中,删除 – (MyEntityID *)objectID方法并添加 @dynamic objectID; 但是,这些文件总是由Mogenerator重新创建的,所以这不是一个 我找不到编译器选项来禁止这个警告(没有标记 作为解决方法,您可以通过[self objectID]替换self.objectID,这是不会引起警告。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |