arrayWithContentsOfFile和arrayWithContentsOfURL为零

时间:2013-12-12 23:11:18

标签: ios objective-c json plist

当我调用[NSArray arrayWithContentsOfFile:]时,我得到零。

NSURL *fileURL = [NSURL URLWithString:className relativeToURL:[self JSONDataRecordsDirectory]];
return [NSArray arrayWithContentsOfFile:[NSString stringWithFormat:@"%@", [fileURL path]]];

或者,我打电话时也会收到:

[NSArray arrayWithContentsOfURL:]

我的所有文件的结果都在JSON中: https://gist.github.com/neverbendeasy/03d047a6789b0ae14e1f

当我检查fileURL时,数据就在那里。

我错过了什么?

2 个答案:

答案 0 :(得分:5)

您无法使用NSArray arrayWith...加载JSON文件。该方法只能加载一个以数组为根的plist文件。

如果您的文件是JSON文件,则应使用:

NSData *jsonData = [NSData dataWithContentsOfURL:fileURL];
NSError *error = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
if (jsonArray) {
    // do something with jsonArray
} else {
    NSLog(@"Couldn't load JSON from %@: %@", fileURL, error);
}

这假设JSON文件的顶级是一个数组。

答案 1 :(得分:0)

使用NSURL的

+ (id)fileURLWithPath:(NSString *)path

+ (id)fileURLWithPath:(NSString *)path isDirectory:(BOOL)isDir

而不是

+ (id)URLWithString:(NSString *)URLString

使用本地文件系统时。