我会对这个虫子发疯的!我有这段代码,它在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
请帮帮忙!谢谢你提前给我。
##EDIT :##我对这个问题做了更多的调查。问题似乎来自于在NSNumber中分配CoreData。我应该指定上面的代码与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因此,问题似乎来自Regi立体声对象(它是一个NSManagedObject,就像前面示例中的newRegistered )。
你知道为什么会这样吗?我从来没有见过这样的东西在两年多的编码,这个错误真的让我觉得我不知道如何编码.
发布于 2011-11-17 15:57:45
提示: 789654截断为16位是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位。
https://stackoverflow.com/questions/8155242
复制相似问题