Estoy usando NSUSerDefaults para almacenar las preferencias del usuario. Recuerdo haber leído en alguna parte que establecer las claves como constantes es una buena idea, y estoy de acuerdo. El siguiente código es el que tengo actualmente:
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:@"polygonNumberOfSides"];
Intenté cambiar esto a:
@implementation Controller
NSString const *kPolygonNumberOfSides = @"polygonNumberOfSides";
-(void)savePolygonInfo {
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:kPolygonNumberOfSides];
}
Si bien esto funciona, produce " warning: passing argument 1 of 'objectForKey:' discards qualifiers from pointer target type". Estoy dispuesto a mantener mi código libre de advertencias del compilador. ¿Cómo puedo solucionar esta advertencia?

NSString * const foofunciona porqueNSStringes inmutable y el puntero es inmutable, por lo que nunca puede cambiar correctamente? Además, recuerdo de C ++ queconstes implícitamentestatic(una optimización del compilador), por lo que no es necesario mencionarlo. ¿Es eso cierto aquí también?No lo use
constcon objetos Objective-C, en realidad no fueron diseñados para usarlo.NSStringlos objetos (entre muchos otros) ya son inmutables por defecto en virtud de su diseño, por lo que hacerlosconstes inútil.Como sugirió e.James , puede usar an
NSString * const, que es un puntero constante a unNSString. Esto es sutilmente diferente de aconst NSString *(equivalente aNSString const *), que es un puntero a una constanteNSString. El uso de aNSString * constevita que reasignekPolypara apuntar a un nuevoNSStringobjeto.fuente
consttambién significa que no puedes reasignarlo. Supongo que me equivoqué.Para acceder desde otras clases:
.h
extern NSString * const PolygonNumberOfSidesPrefsKey;.metro
NSString * const PolygonNumberOfSidesPrefsKey = @"PolygonNumberOfSides"Para acceder solo dentro de la clase actual:
.metro
static NSString * const kPolygonNumberOfSidesPrefsKey = @"PolygonNumberOfSides"fuente
Sugeriría incluso hacer la constante más descriptiva. Una constante para el número de lados de un polígono podría provenir de cualquier lugar. Como sugerencia, ¿qué tal:
en lugar.
fuente