[英]How to fix Implicit conversion loses integer precision warning
我正在使用此代碼來編碼和解碼NSCalenderUnit
- (void)encodeWithCoder:(NSCoder*)encoder {
[super encodeWithCoder:encoder];
NSNumber *boxed = [NSNumber numberWithUnsignedLong:self.myNSCalendarUnit];
[encoder encodeObject:boxed forKey:@"myNSCalendarUnit"];
// ...
}
- (id)initWithCoder:(NSCoder*)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
NSNumber *boxed = [aDecoder decodeObjectForKey:@"myNSCalendarUnit"];
_myNSCalendarUnit = [boxed unsignedLongLongValue];
// ...
}
return self;
}
但是我得到這個警告
隱式轉換將失去整數精度:將'unsigned long long'轉換為'NSCalendarUnit'(又名'enum NSCalendarUnit')
如何更正代碼以消除此警告?
如您所見,NSCalendarUnit的描述類型
typedef NS_OPTIONS(NSUInteger, NSCalendarUnit)
您應更改為_myNSCalendarUnit = [boxed unsignedIntegerValue]
作為一致類型。 long long
由64位定義,但NSUInteger不是( reference )。 並且當創建盒裝時,應使用相同的數據類型NSNumber *boxed = [NSNumber numberWithUnsignedInteger:self.myNSCalendarUnit];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.