将NSNumber添加到NSManagedObject时,NSNumber会更改值

时间:2014-03-27 16:41:19

标签: core-data nsnumber

NSDictionary* ordersTableRow = arrayOfDictionaries[i];
NSMutableDictionary* ordersTemp = [[NSMutableDictionary alloc] initWithDictionary:ordersTableRow];
[ordersTemp removeObjectForKey:@"_id"];
NSNumber *myCHICNumber = [ordersTableRow objectForKey:@"chicnumber"];
NSLog(@"myCHICNumber = %@", myCHICNumber);
[ordersTemp removeObjectForKey:@"chicnumber"];
[ordersTemp setObject:myCHICNumber forKey:@"chicnumber"];
[ordersTemp setObject:[ordersTableRow objectForKey:@"_id"] forKey:@"rowindex"];
NSLog(@"chicnumber for OrderDetails = %@", [ordersTableRow objectForKey:@"chicnumber"]);
[ordersRecord setValuesForKeysWithDictionary:ordersTemp];
NSLog(@"chicnumber for OrderDetails = %@", [ordersTableRow objectForKey:@"chicnumber"]);
NSLog(@"chicnumber for OrdersRecord = %@", [ordersRecord valueForKey:@"chicnumber"]);
[ordersRecord setValue:myCHICNumber forKey:@"chicnumber"];
NSLog(@"chicnumber for OrdersRecord = %@", [ordersRecord valueForKey:@"chicnumber"]);

Yields : 
2014-03-27 09:20:57.227 [2269:3107] myCHICNumber = 2013037
2014-03-27 09:20:57.227 [2269:3107] chicnumber for OrderDetails = 2013037
2014-03-27 09:21:08.243 [2269:3107] chicnumber for OrderDetails = 2013037
2014-03-27 09:21:13.283 [2269:3107] chicnumber for OrdersRecord = -18579
2014-03-27 09:21:47.459 [2269:3107] chicnumber for OrdersRecord = -18579

NSManagedObject defined : 
@property (nonatomic, retain) NSNumber * orderid;
@property (nonatomic, retain) NSString * productid;
@property (nonatomic, retain) NSNumber * quantity;
@property (nonatomic, retain) NSString * colourcode;
@property (nonatomic, retain) NSString * notes;
@property (nonatomic, retain) NSNumber * chicnumber;
@property (nonatomic, retain) NSString * colourname;
@property (nonatomic, retain) NSNumber * rowindex;

所以:只要我将NSNumber chicnumber放入NSManagedObject,无论是通过setValuesForKeysWithDictionary,还是通过setValue:forKey专门设置值:NSNumber从2​​013037变为-18579。

1 个答案:

答案 0 :(得分:2)

看起来chicnumber被配置为"整数16"在核心数据模型中。但是您要分配2013037的值,这需要超过16位。执行此操作时,该值已损坏,并且您最终得到的值不正确。

在数据模型中使用更大的整数类型。此样本值将适合32位整数。是否需要64位取决于chicnumber可能获得的其他值。