Tamam, bu garip. [NSDecimalNumber integerValue] garip davranıyor.{NSDecimalNumber integerValue} garip davranışı
Uygulamamın bazı bölümlerinin neden iOS8'de bozuk olduğunu anlamaya çalışan bir kesme noktasında oturdum ve "timeSeconds" adlı bir değişkene bakıyorum. Bu Xcode Değişkenleri'nde gibi görünür bakın:
_timeSeconds (NSDecimalNumber *) 344.514533996581994496
Ama ayıklayıcısında bunu sorguladığınızda, bu bkz:
(lldb) p [self.timeSeconds doubleValue]
(double) $14 = 344.51453399658192
(lldb) p [self.timeSeconds intValue]
(int) $15 = 344
(lldb) p [self.timeSeconds integerValue]
(NSInteger) $16 = -5
(lldb) p (NSInteger)[self.timeSeconds intValue]
(NSInteger) $17 = 344
"-5" Görüyor? Bir radarı dosyalamadan önce, herhangi biriniz güzel insanlar çoğaltabilir mi, açıklayabilir mi? peşin
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"344.514533996581994496"];
NSLog(@"%@", n); // 344.514533996581994496
NSLog(@"%ld", (long)[n intValue]); // 344
NSLog(@"%ld", (long)[n integerValue]); // -5
NSLog(@"%ld", (long)[n unsignedIntegerValue]); // 12
Teşekkür:
İşte SSCCE var!
Matta
Matthew: Burada fazla duyarlık 64 bit gerektiren numaralara alakalı olduğunu gösteren, sorunu gösteren bir birim test mi? IOS 8'deki NSDecimalNumber, canlı uygulamada büyük sorunlara yol açıyor! – SAHM