Prefix.pch中的类扩展不再适用于xCode 4.2

时间:2011-10-22 02:08:33

标签: objective-c

我在prefix.pch文件中包含了一个标题,如下所示:

#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]];

但是自从升级到xCode 4.2 / iOS 5后,它现在导致崩溃,在上面的行中说"Thread 1: Program received signal: "SIGABRT".

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

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

非常感谢,

1 个答案:

答案 0 :(得分: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块应该只对一个翻译可见(惊讶它没有给出链接错误,除非我误解了你的问题)。

是否还有为什么程序崩溃的上下文?