2011-10-22 102 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