簡體   English   中英

iOS5 CoreData實體顯示錯誤的NSNumber值,適用於iOS4

[英]iOS5 CoreData Entity showing wrong NSNumber value, works on iOS4

我有一個具有NSNumber屬性的CoreData實體(模型中的Integer 16)。 我有以下代碼:

NSLog(@"raw changeAmount=%d", changeAmount);

NSNumber *changeNumber = [NSNumber numberWithInt:changeAmount];

NSLog(@"number changeAmount=%d = %@", [changeNumber intValue], changeNumber);

record.changeAmount = changeNumber;

NSLog(@"new changeAmount=%d", [record.changeAmount intValue]);

當我運行測試時, changeAmount是一個值為123000的int。 當我在iOS 4上測試時,一切正常並打印出123000.但是,如果我在iOS 5上運行相同的代碼,則值類似於-8072或-25,536。 像這樣:

raw changeAmount=123000
number changeAmount=123000 = 123000
new changeAmount=-8072

iOS4和iOS5之間究竟發生了什么? 我一直在錯誤地設置我的NSNumber屬性嗎?

它似乎不是一個整數大小的問題,因為我改變了模型使用整數32(應該一直都是這樣)並且它仍然在發生。 所以我們沒有得到整數溢出或任何東西。

我剛剛在CodeRunner中運行此代碼

size_t shortSize = sizeof(short);
size_t intSize   = sizeof(int);

short short123000 = 123000;
int   int123000   = 123000;

NSString *format = @"\nshortSize       => %d\n"
                   @"int Size          => %d\n"
                   @"short with 123000 => %d\n"
                   @"int with 123000   => %d";

NSLog(format, shortSize, intSize, short123000, int123000);

這導致:

shortSize         => 2  
int Size          => 4  
short with 123000 => -8072  
int with 123000   => 123000

NB大小以字節為單位,一個字節有8位,因此2 * 8 = 16位,4 * 8 = 32位。

我與我工作的一些應用程序有類似的問題。 似乎CoreData對於強制執行其類型變得更加嚴格。 我被它抓住了但是我應該對我正在做的事情更加警惕,如果Apple改變了他們的API,那么它不會像人們會抱怨的那樣表現但是當API改變為做它的時候首先做廣告,這是不幸的,很可能會把人趕出去。

正如您所看到的,這是一個簡單的整數溢出,所以如果您知道您在其中工作的范圍可以輕松解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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