从核心数据中提取时,Float变为0.0000

时间:2012-05-13 02:52:12

标签: iphone ios ipad

我创建了一个具有float属性的实体,并将其值设置为0.5

+(void)createSportNamed:(NSString *)name withContext:(NSManagedObjectContext *)context{
Sport *newSport = [NSEntityDescription insertNewObjectForEntityForName:@"Sport" inManagedObjectContext:context];
    newSport.name = name;
    newSport.maxRep = [NSNumber numberWithInt:45];
    newSport.endurance = [NSNumber numberWithFloat:0.5f];
    NSLog(@"endurance at set = %f",[newSport.endurance floatValue]);

NSError *saveError = nil;
[context save:&saveError];
}

从日志中,浮动值仍为0.5000

但是当我稍后获取它时,该值会以某种方式变为0.0000

-(NSArray*)createWorkoutForSport:(NSString*)sportName withContext:(NSManagedObjectContext*)context{

NSFetchRequest *request = [NSFetchRequest new];
request.entity = [NSEntityDescription entityForName:@"Sport" inManagedObjectContext:context];
NSPredicate *sportNamePredicate = [NSPredicate predicateWithFormat:@"name == %d",sportName];
request.predicate = sportNamePredicate;
NSError *err = nil;
NSArray *results = [context executeFetchRequest:request error:&err];
Sport *theFetchedSport = [results lastObject];

int totalRep = [[theFetchedSport maxRep]intValue];
float endure = [[theFetchedSport endurance]floatValue];
int set;
NSLog(@"Endurance = %f",endure);

1 个答案:

答案 0 :(得分:2)

+(void)createSportNamed:(NSString *)name withContext:(NSManagedObjectContext *)context{
  Sport *newSport = [NSEntityDescription insertNewObjectForEntityForName:@"Sport" inManagedObjectContext:context];
  newSport.name = name;

这清楚地表明您的Sport实体的“name”字段是一个字符串。

[NSPredicate predicateWithFormat:@"name == %d",sportName]

然而,您在这里使用%d,这意味着int。你正在转换一个指向int的字符串指针。您应该使用%@。因此,您的提取请求返回一个空数组,-lastObject返回nil,这意味着[nil endurance]也是nil,这意味着[[nil endurance] floatValue]是还有nil0