Передача данных из локального файла с помощью json

17

Я пытаюсь передать данные на ярлыки из моего файла JSON на простой ViewController, но я не знаю, где именно передать эти данные. Могу ли я просто добавить к моему методу setDataToJson или добавить данные в свой метод viewDidLoad ?

вот мой код

@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
}
    
задан domshyra 03.06.2012 в 00:26
источник

2 ответа

40

Проблема заключается в том, как вы пытаетесь восстановить файл. Чтобы сделать это правильно, сначала вы должны найти свой путь в комплекте. Попробуйте что-то вроде этого:

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

После этого, и как только ваше представление будет загружено, вы сможете установить свои метки, извлекая json следующим образом:

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

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setDataToJson];
}
    
ответ дан Alladinian 03.06.2012 в 10:40
источник
  • А это отлично работает! Большое спасибо :) –  domshyra 03.06.2012 в 19:31
  • Я бы изменил свою функцию nsdictionary, если бы хотел получить информацию из массива данных в файле Json. self.lat.text = [[infomation valueForKey: @ "Location"] valueForKey: @ "Latitude"]; это то, что у меня есть, и это то, что JSON выглядит как «Location»: [{«Longitude»: 0, «Latitude»: 0}], и когда я запускаю его, он говорит - [__ NSArrayI isEqualToString:]: нераспознанный селектор отправлен к примеру –  domshyra 03.06.2012 в 20:30
  • Затем вы должны сделать что-то вроде этого: self.lat.text = [[[информация valueForKey: @ "Location"] objectAtIndex: 0] valueForKey: @ "Latitude"]; –  Alladinian 03.06.2012 в 21:12
  • okay Я попробовал это, и теперь он говорит - [__NSCFNumber isEqualToString:] вместо NSArray. хммм –  domshyra 03.06.2012 в 23:07
  • А, конечно, это номер, и мы должны его первыми перевести. Попробуйте это: self.lat.text = [[[[информация valueForKey: @ "Location"] objectAtIndex: 0] valueForKey: @ "Latitude"] stringValue]; –  Alladinian 04.06.2012 в 10:23
Показать остальные комментарии
1

Вместо этого должно быть valueForKey .

Пример:

name.text = [infomation valueForKey:@"AnimalName"];
    
ответ дан user523234 03.06.2012 в 07:02
источник