簡體   English   中英

如何修復隱式轉換丟失整數精度警告

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM