2012-05-24 17 views
6

Estoy tratando de utilizar mayúsculas/minúsculas para respuestas JSON en NSDictionary ya que a veces mi tipo de teclas de respuesta varía, algunas son de camello, otras son minúsculas u otras combinaciones mixtas. ¿Hay alguna función integrada para verificar el caso de sensibilidad en este caso?Teclas sin mayúsculas y minúsculas para NSDictionary

Gracias.

+4

¿ha considerado simplemente convertir la clave a todas las minúsculas antes de agregarlo al diccionario? Luego, cada vez que busque una clave, simplemente conviértala. – Matt

+0

¿Alguna idea de cómo hacer eso? – kforkarim

Respuesta

6

Últimamente he compartido dos clases que pueden satisfacer sus necesidades. Proporcionan operaciones que no distinguen entre mayúsculas y minúsculas (nombradas después de los métodos NSDictionary y NSMutableDictionary) mientras mantienen las claves originalmente insertadas.

darle una oportunidad:

https://github.com/keeshux/ios-components/tree/master/Components/Utils/KSCIDictionary

+1

Me gusta que use un diccionario de mapeo para preservar el caso de la clave y también preservar la complejidad 'log (n)' del algoritmo de búsqueda. La mayoría de las soluciones abandonan una u otra de esas. – Peter

3
- (NSString *)lowercaseString 

Es un método NSString predeterminado, acaba de hacer [lowercaseString clave] cuando se añade a, o la lectura de la NSMutableDictionary.

+0

Aunque todas las respuestas son correctas aquí, tuve que utilizar este concepto al deserializar mis datos e insertar las teclas, a minúsculas y todo funciona como un amuleto ahora. Gracias a todos – kforkarim

+1

Por conveniencia, podría escribir una subclase 'CaseInsensitive [Mutable] Dictionary' de' NS [Mutable] Dictionary'. Debería anular cada método que toma una tecla como argumento y llamar al método super usando '[key lowercaseString]'. Ahora su código de cliente sigue siendo perfectamente legible: solo tiene que usar un 'CaseInsensitiveMutableDictionary' en lugar de un' NSMutableDictionary'. – Timo

5

La mejor manera sería configurar la clave para el NSDictionary en minúsculas o en mayúsculas;

Por ejemplo, digamos que tengo un NSArray de cadenas. Pudiera conseguir la keyName antes de usarlo y lo convierten utilizando el lowercaseString o la uppercaseString

NSString *itemName = @"lastName"; 
itemName = [itemName lowercaseString]; 

esto va a cambiar la cadena de apellido o si utilicé uppercaseString sería LASTNAME

o también puedes cambie el nombre de la clave cuando agregue al diccionario como tal:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
[dict setObject:objectToAdd forKey:[key uppercaseString]]; 
0

En mi caso, yo no necesitaba todos los métodos o propiedades del diccionario. Solo necesitaba acceso a subíndices insensibles a mayúsculas y minúsculas. Hice una clase personalizada (no una superclase de NSMutableDictionary) e implementado los métodos para permitir el acceso con subíndice e hice los sensible a mayúsculas:

- (id) objectForKeyedSubscript: (NSString *) key { 
    NSMutableDictionary *theData = self->data; 
    return theData[[key lowercaseString]]; 
} 

- (void) setObject: (id) newValue forKeyedSubscript: (NSString *) key { 
    NSMutableDictionary *theData = self->data; 
    theData[[key lowercaseString]] = newValue; 
} 

Ver también: http://clang.llvm.org/docs/ObjectiveCLiterals.html

Cuestiones relacionadas