核心数据不能正确保存整数?从NSString更改为int时

时间:2012-02-25 13:48:30

标签: iphone ios core-data casting

我在我的应用上使用核心数据确定,

我在保存一个应该是整数的数字时遇到问题...当我从Core Data中获取它时,它显示奇怪的数字值

我知道正在工作,因为通过测试,我的idTosave = 345,它显示了CoreData的结果,但是当我发送一个值[string to int]时,我知道它正在记录正确的响应,CD保存一个奇怪的价值:

(请注意我保存到实体idRef)

NSLog(@"resultToDisplay:: %@", self.resultsToDisplay);

//    int idToSave = 345; //if I use this line instead of intValue it saves 345 OK!
int idToSave = (int)[self.resultsToDisplay intValue];


NSLog(@"id salvada as NSINTEGER:: %d",idToSave);



//graba a CD!
[Student insertWithDataQR:[studentDataDicto objectForKey:@"name"] surname:[studentDataDicto objectForKey:@"surname"] 
 phone:[studentDataDicto objectForKey:@""] 
 dob:[studentDataDicto objectForKey:@"dob"] idRef:idToSave ...]];

[[Student defaultManagedObjectContext]save:nil]; 

退出:

 resultToDisplay:: 1329955200
  2012-02-26 00:36:08.597 MyGym_iPad[10867:707] id salvada as NSINTEGER:: 1329955200

注意值1329955200,在保存之前正确显示为整数和字符串,

并检查我的回复:

  NSArray *studiantes = [Student all];


for ( Student *tud in studiantes) {
    NSLog(@"tu %@ ...%@",tud.studentName, tud.idRef );
}

所以,使用int 345,我在日志中看到了 tu.idRef == 345

但是使用字符串中的int,我会在日志中看到 tu.idRef == -32384

所以如果我从转到int的字符串中保存,我会得到我的回复:-32384

编辑:

我已经生成了我生成的核心数据类管理器文件的子类,以将idRef保存为NSNumber

    studentData.idRef = [NSNumber  numberWithInt:idRef];

编辑x2

检查日志:

NSArray *studiantes = [Student all];


for ( Student *tud in studiantes) {
    NSLog(@"tu %@ ...%d",tud.studentName, [tud.idRef intValue]);
}

但结果是: -32384 ,,当我从字符串

保存时,我的值被转换为int

但是正确的价值 345,直接发送一个int,

2 个答案:

答案 0 :(得分:5)

你必须把它放在NSNumber中:

NSNumber *idToSave = [NSNumber numberWithInteger:[self.resultsToDisplay integerValue]];

修改

实际上我们已达到最大值,用整数32字段求解。

答案 1 :(得分:2)

int值不能是Objective C id个对象。

将您的int转换为NSString个对象,或者更好的是,使用NSNumber个对象来包含您的int值。