Como los otros mensajes han dicho, es necesario utilizar un NSNumber
para envolver su doble valor en un objeto. La razón de esto es que todas las clases de colección de la base Cocoa están diseñadas para trabajar con objetos en lugar de valores primitivos. Como sugirió, con algo de trabajo podría pasar un puntero a un valor doble (creo que si lo logró como un puntero de tipo id
), pero tan pronto como su método finalizó y el doble salió del alcance sería lanzado y su puntero ahora estaría apuntando a la basura. Con un objeto, la colección (NSDictionary
, en este caso) conservará su objeto cuando se agregue y lo liberará cuando se elimine o la colección estará dealloc
'ed, asegurando que su valor sobreviva hasta que ya no lo necesite.
lo haría de la siguiente manera:
NSNumber *tempNumber = [[NSNumber alloc] initWithDouble:longitude];
[data setValue:tempNumber forKey:@"longitude"];
[tempNumber release];
que dejará su objeto NSNumber con sólo una cuenta de referencia 1 (el diccionario retenerlo) y no hay autoreleases
El otro método sugerido de hacer:
[data setValue:[NSNumber numberWithDouble: longitude] forKey:@"longitude"];
también funcionará bien, pero su objeto terminará con recuento de referencias +1 y liberación automática desde el método numberWithDouble. Cuando es posible, trato de evitar las autorreleas, pero el código es más conciso. YMMV.
[NSNumber numberWithDouble:] es un objeto autoreleased ... medida que se forma a partir de un método de la clase conveniencia, y por convención aquellos son devueltos como Autorrellezado. –