0

我的模型中有属性为“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.

我究竟做错了什么 ?

提前致谢!

4

2 回答 2

2

id用作属性名称是一个非常糟糕的主意。id是一种类型,即指向泛型对象的泛型指针,我认为这会产生不止一个问题,无论是现在还是将来。

在 Core Data 中,我通常使用以下格式 ID 创建唯一标识符属性,即我将拥有的 Post 类@property (nonatomic, retain) NSNumber *postID;

于 2013-08-01T07:55:15.253 回答
1

12941051589483540916不是有效的“整数 64”。它大于

2^63 - 1 = 9223372036854775807

因此不适合带符号的64 位数字的范围。

Core Data "Integer 64" 是有符号的 64 位数字,因此

12941051589483540916 = 0xB397D9DB232BB1B4

被解释为负数-5505692484226010700

如果您知道托管对象中存储的值应该表示无符号数量,则必须将它们转换为无符号类型,例如

uint64_t theId = [[tempItem valueForKey:@"id"] unsignedLongLongValue];
于 2013-08-01T08:23:22.630 回答