0

いくつかの簡単な手順で Web からデータを読み込もうとしています。

NSData *JSONData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"******"]];

NSObject *json = [JSONData objectFromJSONData];
NSArray *arrayOfStreams = [json valueForKeyPath:@"programs"];
NSDictionary *stream = [arrayOfStreams objectAtIndex:0];
NSString *str = [[NSString alloc]initWithString:[stream valueForKey:@"image"]];
NSURL *urlForImage1 = [NSURL URLWithString:str];
NSData *imageData1 = [NSData dataWithContentsOfURL:urlForImage1];
_screenForVideo1.image = [UIImage imageWithData:imageData1];

しかし、問題は、アプリケーションの起動直後にこれを 30 個実行していることです...そのうちの約 5 個をロードし、他のものをロードしたいと考えています。それらすべてを同時にロードしようとすると、アプリがロードされたすべてを起動しないためです...最初のいくつかをロードして待ってから、他のロードをロードする方法はありますか?

4

1 に答える 1

0

それらのロードに関しては、おそらくスピナーを表示し、バックグラウンドで画像のロードを開始し、準備ができたらスピナーを画像に置き換える必要があります。

- (void) viewDidLoad {
    UIActivityIndicator *spinner = …;
    [self.view addSubview:spinner];
    [self performSelectorInBackground:@selector(startLoadingImage)
         withObject:nil];
  }
- (void) startLoadingImage {
    // You need an autorelease pool since you are running
    // in a different thread now.
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    UIImage *image = [UIImage imageNamed:@"foo"];
    // All GUI updates have to be done from the main thread.
    // We wait for the call to finish so that the pool won’t
    // claim the image before imageDidFinishLoading: finishes.
    [self performSelectorOnMainThread:@selector(imageDidFinishLoading:)
        withObject:image waitUntilDone:YES];
    [pool drain];
}

- (void) imageDidFinishLoading: (UIImage*) image {
    // fade spinner out
    // create UIImageView and fade in
}
于 2013-08-02T05:09:56.103 に答える