将float发送给不兼容的typesid的参数

我正在创build一个button,它使用核心数据来保存点注释的名称,xCoordinate和yCoordinate。 我可以成功保留这个名字,但是当我尝试保存一个坐标时,我总是收到这个错误。 我logging了正确的数据,我似乎无法保存它。

当我尝试为newPOI设置值时,出现如下错误:将“float”发送给不兼容types“id”的参数。

在数据模型中,属性设置为浮动。 self.latitude和self.longitude是floattypes的。

我的方法有点粗糙,因为我相对比较新,但是如果有任何反馈,我可以给你提供有关错误的信息。 以下是我的代码的方法。 我不明白'id'在这里发挥的作用。

-(void) saveSelectedPoiName:(NSString *)name withY:(float)yCoordinate withX:(float)xCoordinate{ self.pointFromMapView = [[MKPointAnnotation alloc] init]; self.annotationTitleFromMapView = [[NSString alloc] init]; AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; NSManagedObjectContext *context = [appDelegate managedObjectContext]; self.annotationTitleFromMapView = name; self.latitude = yCoordinate; self.longitude = xCoordinate; NSEntityDescription *entityPOI = [NSEntityDescription entityForName:@"POI" inManagedObjectContext:context]; NSManagedObject *newPoi = [[NSManagedObject alloc] initWithEntity:entityPOI insertIntoManagedObjectContext:context]; //create new POI record [newPoi setValue:name forKey:@"name"]; [newPoi setValue:yCoordinate forKey:@"yCoordinate"]; <---error happens here for yCoordinate. NSError *saveError = nil; if (![newPoi.managedObjectContext save:&saveError]) { NSLog(@"Unable to save managed object"); NSLog(@"%@, %@", saveError, saveError.localizedDescription); } } 

核心数据中的NSManagedObject属性必须是对象而不是基本types。 在这种情况下,我们的yCoordinate是floattypes的。 为了setValue:floattypes,你必须首先包装一个NSNumber的值。

 [newPoi setValue:[NSNumber numberWithFloat:someFloat] forKey:@"yCoordinate"]; 

 [newPoi setValue:someFloat forKey:@"yCoordinate"];