gpt4 book ai didi

iphone - iOS 5 NSNumber 错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:10 26 4
gpt4 key购买 nike

我会因为这个错误而发疯的!我有这段代码在 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 before : 35459, ID after : 35459

在 iOS 5.0 上:

ID before : 35459, ID after : -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 年多的编码中,我从未见过这样的东西,这个错误真的让我觉得我不知道如何编码......

最佳答案

提示: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 位。

关于iphone - iOS 5 NSNumber 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8155242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com