В моем приложении (которое работало под iOS 4) я собираю картинки, выбранные с помощью UIImagePickerController . К сожалению, у меня возникла странная проблема после обновления до iOS 5.
В двух словах, я храню ALAssetRepresentation в NSMutableArray . Когда я добавляю фотографии из библиотеки, все в порядке. Однако, когда я снимаю и сохраняю изображение, все ALAssetRepresentations (включая новое) становятся размером 0. ALAssetRepresentation.size и ALAssetRepresentation.getBytes: fromOffset: length: error: return 0 и getBytes: error is nil.
Я инициирую ALAssetsLibrary в AppDelegate , поэтому
«Время жизни объектов, которые вы возвращаете из экземпляра библиотеки, связано с временем жизни экземпляра библиотеки». Условие в порядке.
Есть ли способ предотвратить обнуление ALAssetRepresentation? Или как после этого прочитать изображение байтами?
Мой код:
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
if ([picker sourceType] == UIImagePickerControllerSourceTypePhotoLibrary){
[self addPhoto:[info valueForKey:UIImagePickerControllerReferenceURL]];
}
else if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera){
[self savePhoto:[info valueForKey:UIImagePickerControllerOriginalImage]];
}
[self dismissModalViewControllerAnimated:YES];
}
-(ALAssetsLibrary*) getLibrary{
if (!library){
testAppDelegate *appDelegate = (testAppDelegate *)[[UIApplication sharedApplication] delegate];
library = appDelegate.library;
}
NSLog(@"getLibrary: %@", library);
return library;
}
-(void) addPhoto:(NSURL*) url{
ALAssetsLibraryAssetForURLResultBlock successBlock = ^(ALAsset *asset_){
ALAssetRepresentation *assetRepresentation = [[asset_ defaultRepresentation] retain];
[photos addObject: assetRepresentation];
};
ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error){
NSLog(@"Error: Cannot get image. %@", [error localizedDescription]);
};
[[self getLibrary] assetForURL:url resultBlock:successBlock failureBlock:failureBlock];
}
- (void)savePhoto:(UIImage *)image {
[[self getLibrary] writeImageToSavedPhotosAlbum:[image CGImage] orientation:[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error) {
if (error) {
NSLog(@"Error: Cannot save image. %@", [error localizedDescription]);
} else {
NSLog(@"photo saved");
[self addPhoto:assetURL];
}
}];
}