将float发送到不兼容类型id的参数

时间:2015-07-18 02:45:14

标签: ios methods parameters compiler-errors

我正在创建一个按钮,使用核心数据来保存点注释的名称,xCoordinate和yCoordinate。我可以成功保留名称,但是当我尝试保存坐标时,我不断收到此错误。我已经记录了正确的数据,我似乎无法保存它。

当我尝试为newPOI设置setValue时,我收到一条错误,内容如下: 将'float'发送到不兼容类型'id'的参数。

在数据模型中,该属性设置为float。 self.latitude和self.longitude属于float类型。

我的方法有点粗糙,因为我对此比较陌生,但我很感激您可以提供有关错误的反馈。下面是我的方法代码。我不明白'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);
    }
}

1 个答案:

答案 0 :(得分:17)

Core Data中的NSManagedObject属性必须是对象而不是基本类型。在这种情况下,我们的yCoordinate是float类型。要设置浮点类型的setValue:必须首先将值包装在NSNumber中。

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

VS

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