[英]Proper updating of a 32bit method to 64bit support
我有一種方法正在嘗試更新對我的應用程序的64位支持。 我有很多這樣的warnings
。
問題出在以下示例中。 我得到警告:
隱式轉換將整數精度NSInteger轉換為int
- (int) aMethod {
NSUserDefaults *u = [NSUserDefaults standardUserDefaults];
return [u integerForKey:@"someKey"];
}
如果將返回類型更改為NSInteger
我會得到
aMethod int與NSInteger的實現中沖突的返回類型
-(NSInteger) aMethod {
NSUserDefaults *u = [NSUserDefaults standardUserDefaults];
return [u integerForKey:@"someKey"];
}
我試過轉換返回類型
return (NSInteger)[u integerForKey:@"someKey"];
要么
return (long)[u integerForKey:@"someKey"];
但是除非將其強制轉換為(int),否則我無法消除錯誤
return (int)[u integerForKey:@"someKey"];
我已經閱讀了很多SO問題,但是我似乎找不到很好的答案。
更新此方法的正確方法是什么?
方法:
- (int) aMethod ...
返回int
類型的值。 該方法可能首先在標頭( .h
)文件中聲明,然后在實現( .m
)文件中定義。
該聲明:
return [u integerForKey:@"someKey"];
返回調用integerForKey:
的結果,它是NSInteger
類型的值。
NSInteger
不是(Objective-)C 語言定義的類型,而是在框架中定義的類型別名 ( typedef
),用於表示平台上的“自然”整數大小。 它是一個別名int
在32位的平台和long
64位。
因此,編譯器錯誤告訴您(現在)64位值將被截斷以適合32位結果。 沒有解決此問題的正確方法,這取決於與@someKey
關聯的值的@someKey
是:
aMethod
的返回類型; aMethod
,返回aMethod
。 在單獨的聲明中(如果有的話)以及在執行中; 到NSInteger
。 您還需要檢查在調用該方法的任何地方返回NSInteger
值都是可接受的,並且可能需要對變量類型等進行后續更改。您還需要查看與鍵關聯的值在哪里組。 intForKey:
而不是integerForKey
並將返回類型保持原樣。 您還應該更改將鍵設置為存儲int
HTH
更正
在intForKey:
上有一個(不再是)便捷方法intForKey:
NSUserDefaults
備選方案包括: integerForKey:
和強制轉換; objectForKey:
獲取NSNumber
引用,然后獲取intValue
; 等等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.