今天需要从本地Resource文件夹里读取json文件,发现用如下代码有问题:
- 代码一
NSString *path = [self pathForLocationsDataFile];
locationDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
// locationDict一直为nil
刚开始一直以为路径下没有对应的json文件,后来跑到.app路径下看,json文件的确存在。
后来改用如下代码,ok了
- 代码二
NSString *jsonPath = [[NSBundle mainBundle] pathForResource:@"divesite" ofType:@"json"];
NSData *data=[NSData dataWithContentsOfFile:jsonPath];
NSError *error;
id jsonObject=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:&error];
但是,如果你在代码里面创建一个Dictionary对象,用代码三的方法把它写到本地文件里,在从文件里把它读出来是可以的。
- 代码三
- (NSString *) pathForDataFile {
NSArray* documentDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* path = nil;
if (documentDir) {
path = [documentDir objectAtIndex:0];
}
return [NSString stringWithFormat:@"%@/%@", path, @"test.bin"];
}
- (void) saveDataToDisk:(NSMutableDictionary*)dict
{
NSString * path = [self pathForDataFile];
if (dict == nil) {
return;
}
[dict writeToFile:path atomically:YES];
}
- (NSMutableDictionary*) loadDataFromDisk
{
NSString * path = [self pathForDataFile];
NSMutableDictionary * rootObject = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
if (rootObject == nil) {
rootObject = [[NSMutableDictionary alloc] initWithCapacity:0];
}
return rootObject;
}
我决定去看看test.bin长啥样?test.bin竟然是xml的格式,难怪使用
NSMutableDictionary * rootObject = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
的方式不能读取一个json格式的文件!
网友评论