2011-10-22 45 views
0

我包括在我prefix.pch文件头像这样:类不再和Xcode 4.2工作

#import <Availability.h> 

#ifndef __IPHONE_3_0 
#warning "This project uses features only available in iPhone SDK 3.0 and later." 
#endif 

#ifdef __OBJC__ 
    #import <UIKit/UIKit.h> 
    #import <Foundation/Foundation.h> 
    #import "Constants.h" 
#endif 

在包含的头是一个类扩展:

@interface UIColor (MyApp) 

+(UIColor *) myColor; 
+(UIColor *) navColor; 

@end 

@implementation UIColor (MyApp) 

+(UIColor *) myColor { return [UIColor colorWithRed:0 green:0.3 blue:0.7 alpha:1.0]; } 
+(UIColor *) navColor { return [UIColor colorWithRed:0.3 green:0.1 blue:0.2 alpha:1.0]; } 

@end 

然后我在其他文件中被称为例如:

[self.theTable setSeparatorColor:[UIColor myColor]]; 

但自从升级到4.2的Xcode /的iOS 5,现在导致信用评级机构h,在上面的行说"Thread 1: Program received signal: "SIGABRT".

每当我尝试引用颜色而不管哪个文件和什么上下文时,都会发生这种情况。在iOS 4上工作时,我没有这个问题。

有没有更好的方法是以对所有文件都可用的方式扩展类,或修复上述错误?

非常感谢,

+0

'[UIColor plColor]'的实现在哪里? – Lukman

+0

对不起卢克曼,修改了代码以使其通用,但忘记重命名最后一个!现在编辑了这篇文章。如果只有修复是这么简单:)(或者它可能仍然是,谁知道) – Tim

回答

1

你的声明应该是在一个头:

@interface UIColor (MyApp) 

+(UIColor *) myColor; 
+(UIColor *) navColor; 

@end 

,你的定义应该是在您的m:

@implementation UIColor (MyApp) 

+(UIColor *) myColor { return [UIColor colorWithRed:0 green:0.3 blue:0.7 alpha:1.0]; } 
+(UIColor *) navColor { return [UIColor colorWithRed:0.3 green:0.1 blue:0.2 alpha:1.0]; } 

@end 

可能不一定是你的SIGABRT的原因,但你的@implementation块应该onl你永远不会看到一个翻译(惊讶它没有给出链接错误,除非我误解了你的问题)。

有没有更多的上下文为什么程序崩溃?

+0

这就是我得出的结论。我唯一的问题是为什么它能在4. *而不是5.0中工作? – NJones

+0

@NJones idk!正如我所说,我会预料到一个链接错误。一个链接错误是过去发生的事情,我甚至不知道同一个objc方法的多个定义在某个时候正确地形成了(我仍然怀疑它不是)。也许这只是铿锵的差异? – justin

+1

相当简单的解决方案!不敢相信我没有想到这一点。刚刚在网上看到了一个包含在一个文件中的通用头文件的例子,它的工作原理,所以我在使用它时没有考虑过它。然后,当它在新的更新中崩溃时,它不会发生这种根本错误!再次创造魅力。多谢你们。 – Tim