I am trying to pass data to labels from my JSON file onto a simple ViewController but I don't know where to actually pass that data. Would I be able to just add to my setDataToJson
method or would I add the data in my viewDidLoad
method?
我试图将数据从我的JSON文件传递到一个简单的ViewController,但我不知道在哪里实际传递该数据。我可以只添加到我的setDataToJson方法,还是可以在viewDidLoad方法中添加数据?
here is my code
这是我的代码
@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
}
2 个解决方案
#1
40
The problem is the way you're trying to retrieve your file. In order to do it right, you should find first its path in the bundle. Try something like this:
问题是您尝试检索文件的方式。为了做到正确,你应该首先找到它在捆绑中的路径。尝试这样的事情:
+(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;
}
After doing that and once your view is loaded, you should be able to set your labels by retrieving the json like this:
执行此操作后,加载视图后,您应该能够通过检索json来设置标签,如下所示:
-(void)setDataToJson{
NSDictionary *infomation = [NSDictionary dictionaryWithContentsOfJSONString:@"Test.json"];
self.name.text = [infomation objectForKey:@"AnimalName"];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self setDataToJson];
}
#2
1
It should be valueForKey
instead.
它应该是valueForKey而不是。
Example:
例:
name.text = [infomation valueForKey:@"AnimalName"];
#1
40
The problem is the way you're trying to retrieve your file. In order to do it right, you should find first its path in the bundle. Try something like this:
问题是您尝试检索文件的方式。为了做到正确,你应该首先找到它在捆绑中的路径。尝试这样的事情:
+(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;
}
After doing that and once your view is loaded, you should be able to set your labels by retrieving the json like this:
执行此操作后,加载视图后,您应该能够通过检索json来设置标签,如下所示:
-(void)setDataToJson{
NSDictionary *infomation = [NSDictionary dictionaryWithContentsOfJSONString:@"Test.json"];
self.name.text = [infomation objectForKey:@"AnimalName"];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self setDataToJson];
}
#2
1
It should be valueForKey
instead.
它应该是valueForKey而不是。
Example:
例:
name.text = [infomation valueForKey:@"AnimalName"];