我有一个基于核心数据的iPhone应用程序,我收到以下警告:
objc[2472]: Class Property is implemented in both /System/Library/PrivateFrameworks/Notes.framework/Notes and /var/mobile/Applications/B69194FF-448F-48AD-A78D-DDB8935F/AmcCalc.app/AmcCalc. One of the two will be used. Which one is undefined.
当我开始使用SDK 3.0开始使用此应用程序时,我没有收到此错误,那么我该如何处理?
谢谢! 比约
答案 0 :(得分:2)
这是命名冲突。
运行时绑定提供的灵活性需要全局名称空间。这意味着应用程序中任何符号的名称都可能与任何其他符号发生冲突。类属性的符号将类作为其内部名称的一部分,因此它们很少发生冲突。通常,您有两个具有相同名称的类。
在这种情况下,您在应用程序源中有一个类,其名称与Notes框架中的类相同。如果我正确地回忆错误格式,它很可能是名为“Property”的类。 (也可能是说你有一个定义了两次的类的属性。)
作为良好做法,您应该使用您公司或个人独有的后缀或前缀命名您的班级。例如,如果您在Bjorn Geez Software下发布软件,则可以使用“BGS”。所以:
@interface PropertyBGS : ...//new style
@interface BGSProperty : ...//old style
更好的是,让您的类名更具描述性,并避免使用与保留字或常用编程术语相关的任何名称。
例如,如果您正在编写一个房地产应用程序,那么您很可能会使用“Property”作为类的名称来建模实际建筑,但“属性”本身会显示在代码中,因此您应该使用名称更具独特性和描述性,例如:
@interface RealEstatePropertyBGS : ...//new style
@interface BGSRealEstateProperty : ...//old style
这不仅可以防止命名冲突,还可以使代码更具可读性和自我记录功能。