2012-07-27 35 views
0

我正在开发iPhone应用程序。在应用程序中,我需要从Web上加载大量数据(JSON),然后相应地创建视图。请告诉我如何继续。从多个URL加载大量数据,然后在视图中显示

基本上我在做什么是

1.装入从阵列中的JSON web服务。

2.上述接收该数组包含的URL与其他网络服务。可以说,8

3.所以,现在我需要调用8个Web服务,并提取后,我必须解析数据,然后显示给用户。

它的第一次我处理的web服务。所以不知道该怎么做。

主要问题是时间消耗。我如何在其中实现多线程?

请提出任何想法或链接,可以帮助我。

回答

0

我会怎么做:

  1. 创建一个新的NSThread和相应@autoreleasepool它加载第一JSON
  2. 一旦“主JSON”数据加载:把所有的网址为NSMutableArray
  3. 加载上述数组的第一个URL的JSON日期(再次在同一个线程中)
  4. 加载JSON数据后,存储JSON数据
  5. 删除t他是你在[2]中创建的数组中的第一个元素。
  6. 如果数组不为空>转到步骤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); 
} 
+0

非常感谢@basvk。它看起来很古怪。 我可以有一些描述的想法的代码? – harshitgupta 2012-07-27 07:58:32

+1

用一些(未经测试的)代码更新我的答案 – basvk 2012-07-27 08:23:38

相关问题