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