2012-06-02 16 views
17

Estoy tratando de pasar datos a las etiquetas de mi archivo JSON en un simple ViewController, pero no sé dónde pasar realmente esos datos. ¿Podría simplemente agregar a mi método setDataToJson o agregar los datos en mi método viewDidLoad?Pasar datos del archivo local utilizando json

aquí es mi código

@interface NSDictionary(JSONCategories) 
+(NSDictionary*)dictionaryWithContentsOfJSONString:(NSString*)fileLocation; 
@end 

@implementation NSDictionary(JSONCategories) 

+(NSDictionary*)dictionaryWithContentsOfJSONString:(NSString*)fileLocation{ 
    NSData* data = [NSData dataWithContentsOfFile:fileLocation]; 
    __autoreleasing NSError* error = nil; 
    id result = [NSJSONSerialization JSONObjectWithData:data 
               options:kNilOptions error:&error]; 
    if (error != nil) return nil; 
    return result; 
} 
@end 

@implementation ViewController 
@synthesize name; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

} 

-(void)setDataToJson{ 

    NSDictionary *infomation = [NSDictionary dictionaryWithContentsOfJSONString:@"Test.json"]; 
    name.text = [infomation objectForKey:@"AnimalName"];//does not pass data 
} 

Respuesta

40

El problema es la forma en que está tratando de recuperar su archivo. Para hacerlo bien, primero debe encontrar su ruta en el paquete. Intentar algo como esto:

+(NSDictionary*)dictionaryWithContentsOfJSONString:(NSString*)fileLocation{ 
    NSString *filePath = [[NSBundle mainBundle] pathForResource:[fileLocation stringByDeletingPathExtension] ofType:[fileLocation pathExtension]]; 
    NSData* data = [NSData dataWithContentsOfFile:filePath]; 
    __autoreleasing NSError* error = nil; 
    id result = [NSJSONSerialization JSONObjectWithData:data 
               options:kNilOptions error:&error]; 
    // Be careful here. You add this as a category to NSDictionary 
    // but you get an id back, which means that result 
    // might be an NSArray as well! 
    if (error != nil) return nil; 
    return result; 
} 

Después de hacer eso y una vez que se carga la vista, debe ser capaz de establecer sus etiquetas mediante la recuperación del JSON como esto:

-(void)setDataToJson{ 
    NSDictionary *infomation = [NSDictionary dictionaryWithContentsOfJSONString:@"Test.json"]; 
    self.name.text = [infomation objectForKey:@"AnimalName"]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self setDataToJson]; 
} 
+0

Ah esto funciona perfectamente !! Muchas gracias :) – domshyra

+0

¿Cambiaría mi función de notificación si quería obtener información de una matriz de datos en el archivo Json 'self.lat.text = [[infomation valueForKey: @" Location "] valueForKey: @" la latitud "];' esto es lo que tengo y esto es lo que el JSON parece '" Lugar ": [ { "Longitud": 0, "latitud": 0 } ],' y cuando ejecutarlo dice '- [__ NSArrayI isEqualToString:]: selector no reconocido enviado a la instancia' – domshyra

+0

Entonces deberías hacer algo como esto:' self.lat.text = [[[information valueForKey: @ "Location"] objectAtIndex: 0] valueForKey : @ "Latitude"]; ' – Alladinian

1

Debe ser valueForKey lugar.

Ejemplo:

name.text = [infomation valueForKey:@"AnimalName"]; 
Cuestiones relacionadas