2014-01-29 64 views
8

我將我的iOS應用程序轉換爲64位。我安裝了最新的Xcode 5.1(beta 4)。將應用程序轉換爲64位時typedef枚舉上的警告

當我編譯應用程序時,我收到了100多條警告,其中大部分都很容易修復。不過,我對下面的代碼警告:凡爲CommentResponseStatus聲明

+ (CommentResponseStatus)commentReponseStatusCodeWithStatusString:(NSString *)_status 
{ 
    NSArray *commentStatusString = [NSArray arrayWithObjects:@"success", @"needConfirmation", @"stopped", nil]; 

    return [commentStatusString indexOfObject:_status]; 
} 

typedef enum { 
    success, 
    needConfirmation, 
    stopped 
} CommentResponseStatus; 

我有一個警告「隱式轉換損失整數精度:‘NSUInteger’(又名‘unsigned long’ )爲 'CommentResponseStatus」'

該警告是上線return [commentStatusString indexOfObject:_status];

NSArray我們- (NSUInteger)indexOfObject:(id)anObject;

我感到困惑的這一警告,不知道現在如何解決它。任何快速的幫助,將不勝感激。

回答

17

根據apple docs約64位的變化。

枚舉也被鍵入:在LLVM編譯器中,枚舉類型可以用 定義枚舉的大小。這意味着某些枚舉的 類型的大小也可能大於您的預期。與所有其他情況一樣, 解決方案不會對數據類型的大小做任何假設。取而代之的是,將任何枚舉值的變量 用正確的數據類型

爲了解決這個問題,創建類型枚舉如下語法。

typedef NS_ENUM(NSUInteger, CommentResponseStatus) { 
    success, 
    needConfirmation, 
    stopped 
}; 

typedef enum CommentResponseStatus : NSUInteger { 
    success, 
    needConfirmation, 
    stopped 
} CommentResponseStatus; 
+0

它的工作!謝謝! –

+0

我嘗試了第二種解決方案,警告消失了。我不確定第一個。我做了一些更多的搜索,並在這裏找到類似的答案:http://stackoverflow.com/questions/707512/what-is-a-typedef-enum-in-objective-c –

+0

我個人建議第一個,因爲它只有一個重構名稱更改的地方。後者有兩個,我也不喜歡後綴命名風格與後者的前綴。 – Erik