首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 5 NSNumber Bug

iOS 5 NSNumber Bug
EN

Stack Overflow用户
提问于 2011-11-16 16:35:58
回答 1查看 825关注 0票数 3

我会对这个虫子发疯的!我有这段代码,它在iOS 4.3上运行得很好

代码语言:javascript
复制
newRegistered.ticket_id = [NSNumber numberWithInt:
[curRegistered objectForKey:@"ticket_id"] intValue]];

如果我这样做了:

代码语言:javascript
复制
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

请帮帮忙!谢谢你提前给我。

##EDIT :##我对这个问题做了更多的调查。问题似乎来自于在NSNumber中分配CoreData。我应该指定上面的代码与CoreData一起使用(newRegistered是一个NSManagedObject,curRegistered是一个包含JSON数据的NSDictionary (只有字符串,没有int或long.))。

以下是具体的问题:

代码语言:javascript
复制
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

因此,问题似乎来自Regi立体声对象(它是一个NSManagedObject,就像前面示例中的newRegistered )。

你知道为什么会这样吗?我从来没有见过这样的东西在两年多的编码,这个错误真的让我觉得我不知道如何编码.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-17 15:57:45

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

我尝试在iOS 5中复制您的问题。让NSLog(@"%lld -> %@", test, a.ticket_id)显示'789654 -> 3222‘的唯一方法是将ticket_id属性类型设置为Integer 16。如果我将其设置为Integer 32Integer 64,则显示期望值。

在数据模型编辑器中检查ticket_id的属性类型。因为您使用的是long long,所以我假设它应该设置为Integer 64。从您正在展示的内容来看,我怀疑它设置为Integer 16。如果不是,那么这个值就会被截断到其他地方的16位。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8155242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档