1

ALAssetsLibrary保存した写真の最初の30枚の写真を列挙するために使用しています。インスタンスの有効期間は有効期間に関連付けられているため、いつでも必要なときにAppDelegateアクセスできるようにプロパティを作成しました。これが私のコードです:ALAssetsALAssetsLibraryALAssets

if(!_savedAssets) _savedAssets = [[NSMutableArray alloc] init];
else [_savedAssets removeAllObjects];

if(appDelegate.library)
{
    [appDelegate.library release];
    [appDelegate setLibrary:nil];
}

appDelegate.library = [ALAssetsLibrary new];
__block int count = 0;
[appDelegate.library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
    NSLog(@"%d",group.numberOfAssets);
    if(count>30) *stop = YES;
    [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *needToStop) {
        NSLog(@"%d", index);
        if(count<30 && result)
        {
            UIImage *image = [UIImage imageWithCGImage:result.thumbnail];
            [_savedAssets addObject:result];
            [self performSelectorOnMainThread:@selector(imageManipulation:) withObject:image waitUntilDone:NO];
            count++;

        }
        else
          *needToStop = YES;

    }];
} failureBlock:^(NSError *error) {
    NSLog(@"%@",error.description);
}];

ご覧のとおり、サムネイルまたはフルサイズの画像にアクセスできるように、最初の30ALAssetsを追加しています。NSMutableArrayアプリが写真を作成したら、この写真をカメラロールに保存し、ALAssets最初にロードしたときと同じコードでリロードしようとします。リロードする前に、からすべてのオブジェクトを削除しNSMutableArray、を再初期化しALAssetsLibraryます。しかし、これは役に立ちません。私が同じになるたびにALAssetsALAssetsアプリをリロードして初めて新品になります。ALAssetsアプリをリロードせずにリロードする方法は?

4

1 に答える 1

3

のオブザーバーを登録しALAssetsLibraryChangedNotificationます。通知が発生したら、アセットをリロードします。

于 2012-10-24T12:42:26.110 に答える