0

私はiPhoneアプリを開発しています。アプリでは、Webから大量のデータ(JSON)をロードし、それに応じてビューを作成する必要があります。進め方を教えてください。

基本的に私がしているのは

1.配列からjsonをWebサービスにロードします。

2.上記で受け取った配列には、他のWebサービスへのURLが含まれています。言うことができます、8

3.したがって、8つのWebサービスを呼び出す必要があります。フェッチした後、データを解析して、これをユーザーに表示する必要があります。

私がWebサービスを扱うのは初めてです。だから、それを行う方法がわかりません。

主な問題は時間の消費です。マルチスレッドを実装するにはどうすればよいですか?

私を助けることができるアイデアやリンクを提案してください。

4

1 に答える 1

0

私がすること:

  1. 最初のjsonをロードする新しいNSThread対応するものを作成します@autoreleasepool
  2. 「メインの JSON」データがロードされたら: すべての URL をNSMutableArray
  3. 上記の配列の最初の URL (再び同じスレッド内) の JSON 日付を読み込みます
  4. JSON データが読み込まれたら、JSON データを保存します。
  5. [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);
}
于 2012-07-27T07:49:09.493 に答える