iOS 5 NSNumber Bug(iOS 5 NSNumber Bug)

编程入门 行业动态 更新时间:2024-10-27 18:17:52
iOS 5 NSNumber Bug(iOS 5 NSNumber Bug)

我会因为这个错误而变得疯狂! 我有这段代码在iOS 4.3上运行良好

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,ID之后:-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年多的编码中从未见过这样的东西,这个bug真的让我觉得我不知道怎么编码......

I will become crazy with this bug ! I have this piece of code which works well on iOS 4.3

newRegistered.ticket_id = [NSNumber numberWithInt: [curRegistered objectForKey:@"ticket_id"] intValue]];

If I do :

NSLog(@"ID before : %d, ID after : %d", [curRegistered objectForKey:@"ticket_id"] intValue], [newRegistered.ticket_id intValue]);

I Have on iOS 4.3 :

ID before : 35459, ID after : 35459

And on iOS 5.0 :

ID before : 35459, ID after : -30077

Please help ! Thank you for advance.

##EDIT :## I have investigated a bit more the problem. It seems the problem comes from assigning a NSNumber in CoreData. I should have specified that the piece of code above is used with CoreData (newRegistered is a NSManagedObject, and curRegistered is a NSDictionary containing JSON Data (only strings, never int or long...)).

Here is the specific problem :

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

So it seems the problem comes from the Registereds object (which is a NSManagedObject, like the newRegistered in the previous example).

Do you have any idea why this happens? I have never seen something like that in more than 2 years of coding, this bug really makes me think I don't know how to code...

最满意答案

提示:截断为16位的789654为3222。

我试图用iOS 5复制你的问题。我可以获得NSLog(@"%lld -> %@", test, a.ticket_id)显示'789654 - > 3222'的唯一方法是设置ticket_id属性输入到Integer 16 。 如果我将其设置为Integer 32或Integer 64则会显示预期值。

在数据模型编辑器中检查ticket_id的属性类型。 因为你使用long long我认为它应该设置为Integer 64 。 从你所展示的内容我怀疑它被设置为Integer 16 。 如果没有,则该值在其他地方被截断为16位。

A hint: 789654 truncated to 16 bits is 3222.

I have tried to replicate your problem with iOS 5. The only way I can get NSLog(@"%lld -> %@", test, a.ticket_id) to display '789654 -> 3222' is if I set the ticket_id attribute type to Integer 16. If I set it to Integer 32 or Integer 64 then the expected value is displayed.

Check the attribute type for ticket_id in the data model editor. Because you are using long long I assume it should be set to Integer 64. From what you are showing I would suspect it is set to Integer 16. If not, then the value is getting truncated to 16 bits somewhere else.

更多推荐

本文发布于:2023-07-25 22:25:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1267054.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:iOS   NSNumber   Bug

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!