ios开发学习iOS框架 底层 技巧

从本地读取json文件

2015-02-07  本文已影响7436人  funpig

今天需要从本地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格式的文件!

上一篇下一篇

猜你喜欢

热点阅读