2015-09-10 2 views
1

Я пытаюсь сохранить некоторые изображения, которые я создаю для альбома, используя ALAssetLibrary, используя ALAssetsLibrary + CustomPhotoAlbum от Marin Todorov. Тем не менее, я получаю случайные сбои большую часть времени.Ошибка при сохранении альбома с использованием ALAssetLibrary

// Get the asset library instance. 
    ALAssetsLibrary *library = [ALAssetLibraryManager defaultAssetsLibrary]; 
    [self.imageModels enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    // Sidenote: Trying to use an image that I have locally in my image assets fails as well. 
    // UIImage *image = [UIImage imageNamed:@"Background-light-png.png"]; 
    UIImage *image = [UIImage imageWithContentsOfFile:[obj valueForKey:@"imagePath"]]; 
    [_imagesToShare addObject:image]; 
    if (image){ 
     [library saveImage:image toAlbum:@"My Album" completion:^(NSURL assetURL, NSError error) { 
      NSLog(@"Success"); 
     } failure:^(NSError *error) { 
      NSLog(@"Failed %@", error.description); 
     }]; 
    } 
}]; 

В блоке отказа, если добавить следующий код, я могу видеть, что изображение будет сохранено в Camera Roll.

UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 

Ошибки я получаю

Failed: Error Domain=LIB_ALAssetsLibrary_CustomPhotoAlbum Code=0 "ALAssetsGroup failed to add asset." UserInfo=0x171277c80 {NSLocalizedDescription=ALAssetsGroup failed to add asset.} 

Код для получения библиотеки активов

+ (ALAssetsLibrary *)defaultAssetsLibrary { 
    static dispatch_once_t pred = 0; 
    static ALAssetsLibrary *library = nil; 
    dispatch_once(&pred, ^{ 
     library = [[ALAssetsLibrary alloc] init]; 
    }); 
    return library; 
} 

Я искал много, но не мог найти много на эту тему. Мой метод вызывается из нажатия кнопки, и в то же время не должно происходить никаких других операций. Единственная информация, которую я нашел в Интернете, заключалась в том, что вы должны хранить один и тот же экземпляр ALAssetLibrary, который я сделал с использованием класса singleton.

ответ

1

Это, как я использую библиотеку активов для сохранения изображений:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
[library writeImageToSavedPhotosAlbum:((UIImage *)[info objectForKey:UIImagePickerControllerEditedImage]).CGImage 
          metadata:[info objectForKey:UIImagePickerControllerMediaMetadata] 
         completionBlock:^(NSURL *assetURL, NSError *error) { 
          NSLog(@"assetURL %@", assetURL); 
          imageURL=[assetURL absoluteString]; 

          [[NSUserDefaults standardUserDefaults] setObject:imageURL forKey:@"imageurl"]; //for reference of the path 

         }]; 
Смежные вопросы