我会做什么:
- 创建一个新的
NSThread
和相应@autoreleasepool
的加载第一个 json
- 加载“主 JSON”数据后:将所有 url 放入
NSMutableArray
- 加载上述数组的第一个 URL(同样在同一个线程中)的 JSON 日期
- 加载 JSON 数据后,存储 JSON 数据
- 从您在 [2] 中创建的数组中删除第一个元素。
- 如果您的数组不为空 > 转到第 3 步。
像这样的东西?(没有测试过):
#import "JSONKit.h"
- (void)viewDidLoad {
[super viewDidLoad];
[NSThread detachNewThreadSelector:@selector(_loadJSON) toTarget:self withObject:nil];
};
-(void)_startNewThread {
@autoreleasepool {
NSError *error = nil;
/*
main json file:
[
{ "url": "http://domain.com/file2.json" },
{ "url": "http://domain2.com/file.json" },
{ "url": "http://domain3.com/file.json" }
]
*/
NSMutableArray *mainUrls = [[NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://domain.com/file.json"] encoding:NSUTF8StringEncoding error:&error] mutableObjectFromJSONString];
NSMutableArray *returnArray = [[NSMutableArray alloc] init];
if (error == nil) {
while ([mainUrls count]) {
NSURL *url = [NSURL URLWithString:[[mainUrls objectAtIndex:0] objectForKey:@"url"]];
NSDictionary *dictionary = [[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error] objectFromJSONString];
if (error == nil) {
[returnArray addObject:dictionary];
}
[mainUrls removeObjectAtIndex:0];
}
}
[returnArray autorelease];
[self performSelectorOnMainThread:@selector(_finished:) withObject:[NSArray arrayWithArray:returnArray] waitUntilDone:YES];
}
}
-(void)_finished:(NSArray *)__array {
NSLog(@"Result: %@", __array);
}