将NSNumber设置为NSManagedObject属性

时间:2013-08-01 07:45:49

标签: iphone ios core-data

我的模型中的Entity属性为“id”,数据类型为整数64。 我正在使用属性@property (nonatomic, retain) NSNumber * id;。 我使用

创建NSManagedObject
id tempItem = [NSEntityDescription insertNewObjectForEntityForName:@"XYZ" 
                inManagedObjectContext:context];

并设置NSNumber myID值[tempItem setValue:myID forKey:@"id"];

问题是:当我使用打印描述打印NSNumber myID时,它会显示正确的数字,但是当我使用上面的代码将其设置为NSManagedObject并打印NSManagedObject时,它会变为负值。 我正在尝试设置12941051589483540916(此号码是有效的interger64),设置为-5505692484226010700

我做错了什么?

提前致谢!

2 个答案:

答案 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];