我會因爲這個bug而變得瘋狂! 我有這樣的一段代碼,如果我做的iOS 4.3iOS 5 NSNumber Bug
newRegistered.ticket_id = [NSNumber numberWithInt:
[curRegistered objectForKey:@"ticket_id"] intValue]];
效果很好:
NSLog(@"ID before : %d, ID after : %d",
[curRegistered objectForKey:@"ticket_id"] intValue], [newRegistered.ticket_id intValue]);
我在iOS 4.3有:
ID前:經過35459 ID :35459
而在iOS 5.0上:
ID前:35459,編號:-30077
請幫幫忙! 謝謝你的提前。
##編輯︰## 我已經調查了更多的問題。看來問題來自在CoreData中分配NSNumber。我應該指定上面的代碼片段與CoreData一起使用(newRegistered是一個NSManagedObject,curRegistered是一個包含JSON數據的NSDictionary(只有字符串,從不是int或long ...))。
下面是具體的問題:
long long test = 789654;
Registereds *a = [NSEntityDescription insertNewObjectForEntityForName:@"Registereds" inManagedObjectContext:self.managedObjectContext];
a.ticket_id = [NSNumber numberWithLongLong:test];
NSLog(@"%lld -> %@", test, a.ticket_id); // Displays 789654 -> 3222 on iOS 5 and 789654 -> 789654 on iOS 4.3
NSNumber *ticket_id = [NSNumber numberWithLongLong:test];
NSLog(@"%lld -> %@", test, ticket_id); // Displays 789654 -> 789654
如此看來問題來自於Registereds對象(這是一個NSManagedObject,像newRegistered在前面的例子)。
你知道爲什麼會發生這種情況嗎?我從來沒有見過這樣的事情在2年以上的編碼,這個錯誤真的讓我覺得我不知道如何代碼...
您可以嘗試使用'[NSNumber numberWithLong:...'來進一步調查問題。 – dasdom
它是模擬器/設備嗎? – debleek63
您應該打印'[curRegistered objectForKey:@「ticket_id」]'的「raw」值以查看是否存在任何古怪的字符。 –