XCode 4.5会警告父/子类的类别之间的方法名称冲突

我正在开发一个最初在XCode 4.0中构build的项目,然后将其迁移到使用XCode 4.2。 现在我已经testing过迁移到XCode 4.5,并且我得到了如下的警告:

instance method 'values' in category from <pathToTheFile>/HistoryObject+extras.o conflicts with same method from another category 

这些警告从来没有出现在以前版本的XCode中,代码没有改变。

该项目在iOS 4.3中为部署目标设置。

所以,我们从以前的开发人员那里得到了一些DAOtypes类,我相信它们是从CoreData自动生成的,然后每个类都有一个类来扩展它来实现某些方法。 我会举一个例子

我们有一个名为LisaObject的基类,它inheritance自NSManagedObject,它有一个名为LisaObject + extras的类。 在LisaObject + extras中,有一个名为“values”的方法返回一个NSMutableDictionary。

然后我们有一个名为HistoryObject的类从LisaObjectinheritance。 还有一个名为HistroyObject + extras的HistoryObject类别。 这个类别也有一个名为“values”的方法。 在HistoryObject + extras values方法中,它调用[super values],然后检查一些条件并在字典中设置一些未在基类方法中设置的附加值。

然后我们有一个名为LessonStatusObject的类inheritance自HistoryObject,它也有一个名为LessonStatusObject + extras的类,它有一个名为values的方法。 这个值方法也调用[超值],然后在返回的字典上做一些额外的工作。

对于这些“值”方法中的每一个,我们都会在编译时得到一个警告,就像上面显示的类别中有一个名称相冲突的方法一样。

我有几个关于这个问题。

首先,这个实施是否会导致任何合法的问题,还是这些警告总体上是良性的? 我试图想到这个实现如何在运行时造成模糊,但我不明白这是怎么发生的。

其次,有什么我应该做的,以解决这些警告(我不是说只是让他们停止出现,我的意思是纠正原因)? 还有其他的方法我们应该这样做吗?

另外,为什么XCode 4.2不会提醒这个问题,但是XCode 4.5会提示呢?

我误解了关于类别的东西吗? 我的意思是,如果“values”方法实际上是每个类实现的一部分,那么按照我们的方式覆盖它们就不是问题,但是编译器似乎只是因为这些类是抱怨而已。 这有什么不安全的吗?

任何意见,非常感谢。

编辑:只是为了提供更多的信息.​​..当我们使用XCode 4.2,项目有编译器设置为苹果LLVM编译器3.0。 现在,当我在XCode 4.5中打开项目时,它将编译器设置为Apple LLVM Compiler 4.1。

不要忽视警告。

苹果的“用Objective-C编程”指南在“ 定制现有类 ”一节中说:

如果在类别中声明的方法的名称与原始类中的方法相同,或者在同一个类(甚至是超类)上的另一个类中的方法相同,则行为是不确定的运行。

如果它一直在为你工作,那么这是运气。

我有这个同样恼人的问题,事实certificate,我不小心把这个类别的.m文件,而不是我的VC的代码之一.h文件。 将其更正为.h文件删除链接器警告。

我也有这个问题,但又是由不同的东西造成的。 对我来说,这个类已经被添加到Xcode项目了两次! 直到我去重命名其中一个方法,并在重构预览中看到它将类别文件列出了两次,才发现是这种情况。