使用json从本地文件传递数据
我试图将数据从我的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 }
问题是您尝试检索文件的方式。 为了做到正确,你应该首先找到它在捆绑中的路径。 尝试这样的事情:
+(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]; }
它应该是valueForKey
而不是。
例:
name.text = [infomation valueForKey:@"AnimalName"];