2012-06-02 8 views
17

Sto provando a passare i dati alle etichette dal mio file JSON su un semplice ViewController ma non so dove effettivamente passare quei dati. Sarei in grado di aggiungere al mio metodo setDataToJson o aggiungerei i dati nel mio metodo viewDidLoad?Passare i dati dal file locale usando json

Ecco il mio codice

@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 
} 

risposta

40

Il problema è il modo in cui si sta cercando di recuperare il file. Per farlo bene, dovresti trovare prima il suo percorso nel pacchetto. Provare qualcosa di simile:

+(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; 
} 

Dopo averlo fatto e una volta che il vostro punto di vista è caricato, si dovrebbe essere in grado di impostare le etichette recuperando il JSON in questo modo:

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

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

Ah questo funziona perfettamente !! Grazie mille :) – domshyra

+0

Vorrei cambiare la mia funzione nsdictionary se volevo ottenere informazioni da una matrice di dati nel file Json 'self.lat.text = [[infomation valueForKey: @" Location "] valueForKey: @" Latitude "];' questo è quello che ho e questo è ciò che il JSON sembra '" Location ": [ { "Longitudine": 0, "Latitude": 0 } ],' e quando ho esegui esso dice '- [__ NSArrayI isEqualToString:]: selettore non riconosciuto inviato all'istanza' – domshyra

+0

Quindi dovresti fare qualcosa del genere:' self.lat.text = [[[valore informazioniForKey: @ "Posizione"] objectAtIndex: 0] valueForKey : @ "Latitude"]; ' – Alladinian

1

Dovrebbe essere valueForKey invece.

Esempio:

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