0
我使用这个代码进行编码和解码如何解决隐式转换失去整数精度警告
- (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;
}
但我得到这个警告
隐式转换损失整数精度:“无符号长长”到 ‘NSCalendarUnit’(又名‘枚举NSCalendarUnit’)
如何正确的代码删除此 警告?
但我用numberWithUnsignedLong转换成NSNumber ...将转换为unsignedIntegerValue可以影响在某种程度上? –
最合适的方法是创建[NSNumber numberWithUnsignedInteger:self.myNSCalendarUnit];'带原始类型的NSCalendar(NSUInteger)。它不应该丢失任何情况下的数据。此外,在你当前的代码中,你使用'unsignedLong'创建,但是使用'unsignedLongLong'获取,这是不合理的。 – nynohu