0

したがって、init関数では、AssetsLibraryを介して画像を取得しています

//initWithNibName:

photoArray = [[NSMutableArray alloc ]init];
    ALAssetsLibrary *asset = [[ALAssetsLibrary alloc] init];
    void (^enumerateGroup)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
    {
        if (result != nil) {
            [photoArray addObject:result];
            NSLog(@"%@", result);
        }

    };
    void (^enumerationBlock)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop)
    {
        if (group != nil) {
            [group enumerateAssetsUsingBlock:enumerateGroup];
        }
    };
    [asset enumerateGroupsWithTypes:ALAssetsGroupAll 
                         usingBlock:enumerationBlock 
                       failureBlock:^(NSError *error) {NSLog(@"Something went wrong");}];
    [asset release];

//loadView

- (void)loadView
 {
UIView *view = [[UIView alloc ] init];
NSLog(@"%d", [photoArray count]);
self.view = view;
[view release];
}

コンソールからのログ:

2011-06-24 18:55:12.255 xxx[9450:207] 0 //

2011-06-24 18:55:12.306 xxx[9450:207] ALAsset - タイプ:写真、URL:{ "public.jpeg" = "assets-library://asset/asset.JPG?id=1000000001&ext=JPG" ;

そして、私は混乱しています。ログでわかるように、loadView は initWithNibName よりも速くコードを実行しました。これは、AssetLibrary を介した画像の取得に時間がかかるためです。しかし、このコードはすべて 1 つのスレッドで実行されていると思うので、loadView は initWithNibName を待つ必要があります。

4

1 に答える 1

0

-enumerateGroupsWithTypes:...andのドキュメントには-enumerateAssetsUsingBlock:...、これらのメソッドが同期的に実行されるとは記載されていません。あなたが見つけたものから、待つ必要がないように、彼らは別のスレッドで列挙を行っているようです。

于 2011-06-24T17:30:22.387 に答える