Вопрос

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;

So : as soon as i put the NSNumber chicnumber into the NSManagedObject, whether by setValuesForKeysWithDictionary, or by setting the value specifically with setValue:forKey: the NSNumber changes from 2013037 to -18579.

Это было полезно?

Решение

It looks like chicnumber is configured as "Integer 16" in the Core Data model. But you're assigning a value of 2013037, which requires more than 16 bits. When you do this, the value is corrupted and you end up with an incorrect value.

Use a larger integer type in the data model. This sample value would fit in a 32 bit integer. Whether you need 64 bits depends on what other values you might get for chicnumber.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top