我的模型中的Entity属性为“id”,数据类型为整数64。
我正在使用属性@property (nonatomic, retain) NSNumber * id;
。
我使用
id tempItem = [NSEntityDescription insertNewObjectForEntityForName:@"XYZ"
inManagedObjectContext:context];
并设置NSNumber myID值[tempItem setValue:myID forKey:@"id"];
问题是:当我使用打印描述打印NSNumber myID时,它会显示正确的数字,但是当我使用上面的代码将其设置为NSManagedObject
并打印NSManagedObject时,它会变为负值。
我正在尝试设置12941051589483540916
(此号码是有效的interger64
),设置为-5505692484226010700
。
我做错了什么?
提前致谢!
答案 0 :(得分:2)
使用id
作为属性名称是一个非常糟糕的主意。 id
是一种类型,即指向泛型对象的通用指针,我认为这会在现在或将来创建多个问题。
在核心数据中,我通常使用以下格式ID创建唯一标识符属性,即对于Post类我将具有@property (nonatomic, retain) NSNumber *postID;
答案 1 :(得分:1)
12941051589483540916
不是有效的“整数64”。它大于
2^63 - 1 = 9223372036854775807
因此不适合签名 64位数字的范围。
核心数据“整数64”是带符号的64位数字,因此
12941051589483540916 = 0xB397D9DB232BB1B4
被解释为负数-5505692484226010700
。
如果您知道托管对象中存储的值应表示无符号数量, 你必须将它们转换为无符号类型,例如
uint64_t theId = [[tempItem valueForKey:@"id"] unsignedLongLongValue];