Я использую этот код для кодирования и декодирования 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;
}
Но я получаю это предупреждение
неявное преобразование теряет целочисленную точность: «неподписанных долгое длинный»в „NSCalendarUnit“(ака„перечисление NSCalendarUnit“)
Как исправить код, чтобы удалить этот предупреждение?
но я использовал numberWithUnsignedLong для преобразования в NSNumber ... может ли преобразование в unsignedIntegerValue повлиять на способ? –
Наиболее подходящим способом является создание [NSNumber numberWithUnsignedInteger: self.myNSCalendarUnit]; 'с исходным типом NSCalendar (NSUInteger). Он не должен потерять данные по любому делу. Кроме того, в вашем текущем коде вы создаете с 'unsignedLong', но получаете с' unsignedLongLong', это не соответствует. – nynohu