Этот фрагмент кода может получить ALAsset
:
void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger
index, BOOL *stop) {
if(result != nil) {
[self.assets addObject:result];
}
};
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {
if(group != nil) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsUsingBlock:assetEnumerator];
} else {
self.image = [self getLastImage];
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) {
NSLog(@"error occour =%@", [myerror localizedDescription]);
};
assets = [[NSMutableArray alloc] init];
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:failureblock];
[assetsLibrary release];
Чтобы получить дату файла, я использую это:
assetURLArray = [[NSMutableArray alloc] init];
for (ALAsset *asset in self.assets) {
NSDate * date = [asset valueForProperty:ALAssetPropertyDate];
Затем я обнаружил, что последнее изображение всегда будет верхнимодин из assetURLArray
, так что я наконец-то получил последнюю версию, подобную этой:
if (self.assets && [self.assets count]) {
ALAsset *asset = [self.assets objectAtIndex:([self.assets count] - 1)];
CGImageRef ref = [[asset defaultRepresentation] fullResolutionImage];
Я не знаю, работает ли это всегда ... Надеюсь, кто-нибудь сможет прояснить мои сомнения по этому поводу.
И там я ищу способ синхронизации потока ...
2012-04-03 Обновление
Теперь я использую NSNotification
, чтобы решить эту проблемупроблема:
- (void)gotLastImageCallBack {
if (notifyName) {
[[NSNotificationCenter defaultCenter] postNotificationName:notifyName object:nil];
}
}
После извлечения изображения уведомление отправляет обратный вызов в связанный класс.