2014-08-29 4 views
-2

При попытке сохранить двойной в объекте я получаю ошибкуБрус магазин дважды в NSManagedObject

error Sending 'double' to parameter of incompatible type 'id' 

Мой код:

NSManagedObjectContext *context = [self managedObjectContext]; 
    NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts"  inManagedObjectContext:context]; 

    [newDevice setValue:longitudes forKey:@"longitude"]; 
    [newDevice setValue:latitudes forKey:@"latitude"]; 


setValue:longitudes 

долгот имеет тип двойной.

+0

Что такое тип '' longitudes' и latitudes'? – kelin

+0

@kelin type double – mowi

+0

'[newDevice setValue: @ (longitudes) forKey: @" longitude "];' и '[newDevice setValue: @ (широты) forKey: @" широта "];', возможно? – holex

ответ

2

вам нужно использовать NSNumber для хранения двойного значения.

NSManagedObjectContext *context = [self managedObjectContext]; 
NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts"  inManagedObjectContext:context]; 

[newDevice setValue:@(longitudes) forKey:@"longitude"]; 
[newDevice setValue:@(latitudes) forKey:@"latitude"]; 

Так что это должно сработать.

Вы также можете написать:

NSNumber *longitudesNumber = [NSNumber numberWithDouble:longitudes]; 
NSNumber *latitudesNumber = [NSNumber numberWithDouble:latitudes]; 
[newDevice setValue: longitudesNumber forKey:@"longitude"]; 
[newDevice setValue: latitudesNumber forKey:@"latitude"]; 

Лучше понять :)

Чтобы показать, вы можете использовать:

NSNumber *number = ...(your object); 

label.text = [NSString stringWithFormat:@"%@", number]; 
label.text = [NSString stringWithFormat:@"%f", [number doubleValue]]; 
+0

@Matz еще один вопрос пожалуйста, если я хочу конвертировать label.text, чтобы удвоить это возможно ?? – mowi

+0

Эй, см. Мое редактирование – Matz

+0

@Matz [newDevice setValue: self.longitudelable.text forKey: @ "descrip"]; – mowi

1

Вы можете сделать это, как это

[newDevice setValue:[NSNumber numberWithDouble:longitudes] forKey:@"longitude"]; 
[newDevice setValue:[NSNumber numberWithDouble:latitudes] forKey:@"latitude"]; 
+0

еще один вопрос пожалуйста, если я хочу преобразовать label.text, чтобы удвоить это возможно ?? – mowi

+0

Да, вы можете преобразовать его, как этот double aDval = [label.text doubleValue]; – Rajesh

0

Ваш код:

[newDevice setValue:longitudes forKey:@"longitude"];

... использует key-value coding method для установки значения, и методы кодирования ключ-значение требуют объекты значений. Это метод подпись для setValue:forKey::

- (void)setValue:(id)value forKey:(NSString *)key

Исключения происходит потому, что вы передаете двойной параметр значения. Подкласс NSManagedObject может - и должен - использовать скаляры, а не NSNumber для представления удвоений, вы просто не можете использовать setValue:forKey:, не сначала обменивая значения в классе NSValue. Вы можете, однако, использовать традиционные обозначения или точечную нотацию, чтобы установить значение с двойным:

[newDevice setLongitude:longitudes];

или

newDevice.longitude = longitudes;

 Смежные вопросы

  • Нет связанных вопросов^_^