Je vais devenir fou avec ce bug! J'ai ce morceau de code qui fonctionne bien sur iOS 4,3iOS 5 NSNumber Bug
newRegistered.ticket_id = [NSNumber numberWithInt:
[curRegistered objectForKey:@"ticket_id"] intValue]];
Si je fais:
NSLog(@"ID before : %d, ID after : %d",
[curRegistered objectForKey:@"ticket_id"] intValue], [newRegistered.ticket_id intValue]);
I Have sur iOS 4.3:
ID avant: 35459, ID après : 35459
Et sur iOS 5.0:
ID avant: 35459, ID après: -30077
S'il vous plaît aider! Merci d'avance.
## EDIT: ## J'ai étudié un peu plus le problème. Il semble que le problème vient de l'attribution d'un NSNumber dans CoreData. J'aurais dû spécifier que le morceau de code ci-dessus est utilisé avec CoreData (newRegistered est un NSManagedObject, et curRegistered est un NSDictionary contenant des données JSON (seulement des chaînes, jamais int ou long ...)).
Voici le problème spécifique:
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
Il semble que le problème vient de l'objet Registereds (qui est un NSManagedObject, comme le newRegistered dans l'exemple précédent).
Avez-vous une idée pourquoi cela se produit? Je ne l'ai jamais vu quelque chose comme ça dans plus de 2 ans de codage, ce bug fait vraiment me pense que je ne sais pas comment le code ...
Vous pouvez essayer d'utiliser '[NSNumber numberWithLong: ...' pour approfondir le problème. – dasdom
Est-ce simulateur/appareil? – debleek63
Vous devriez probablement imprimer la valeur "brute" de '[curRegistered objectForKey: @" ticket_id "]' pour voir s'il y a des caractères bizarres présents. –