2015-10-08 5 views
1

Я использую следующий код, чтобы сохранить изображение в моей пользовательской папке, созданной в ИО фотогалерее:Сохранить изображение в пользовательскую папку Galary с помощью phphotolibraty - IOS

Я получаю эту ошибку: Error Domain=NSCocoaErrorDomain Code=-1 "(null)"

Может кто-нибудь помочь мне на этом ?

+(BOOL)saveToAlbum:(NSString*)albumName image:(UIImage*)image{ 
__block PHFetchResult *photosAsset; 
__block PHAssetCollection *collection; 
__block PHObjectPlaceholder *placeholder; 
__block BOOL retStat = false; 
NSData *newImageSize = UIImageJPEGRepresentation(image, 1); 

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
    PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:[UIImage imageWithData:newImageSize]]; 
    placeholder = [assetRequest placeholderForCreatedAsset]; 
    photosAsset = [PHAsset fetchAssetsInAssetCollection:[self findAlbumAssetCollection:albumName] options:nil]; 
    PHAssetCollectionChangeRequest *albumChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection 
                                assets:photosAsset]; 
    [albumChangeRequest addAssets:@[placeholder]]; 
} completionHandler:^(BOOL success, NSError *error) { 
    if (success){ 
     retStat = true; 
    } 
    else{ 
     NSLog(@"%@", error); 
    }}]; 
} 
+0

Почему вы объявляете переменные в качестве переменных блока, когда вы не меняете их вне блока? Вы только изменяете значение BOOL вне блока. –

+0

Значит ли это, что проблема связана с объявлением переменных в качестве блок-переменной? –

+0

, который не может быть проблемой, но попробуйте увидеть, объявив переменные внутри блока, а также проверьте, нет ли nsdata и какая ваша коллекция? –

ответ

1

Спасибо Mr.T за предоставленную мне подсказку (сбор был равен нулю в albumChangeRequest) .. Вот правильное решение для этого.

+(BOOL)saveToAlbum:(NSString*)albumName image:(UIImage*)image{ 
__block BOOL retStat = false; 
NSData *newImageSize = UIImageJPEGRepresentation(image, 1); 
UIImage *imageNew = [UIImage imageWithData:newImageSize]; 
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
    PHFetchResult *photosAsset; 
    PHAssetCollection *collection = [self findAlbumAssetCollection:albumName]; 
    PHObjectPlaceholder *placeholder; 
    placeholder = [[PHAssetChangeRequest creationRequestForAssetFromImage:imageNew] placeholderForCreatedAsset]; 
    photosAsset = [PHAsset fetchAssetsInAssetCollection:collection options:nil]; 
    PHAssetCollectionChangeRequest *albumChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection assets:photosAsset];                  
    [albumChangeRequest addAssets:@[placeholder]]; 
} completionHandler:^(BOOL success, NSError *error) { 
    if (success){ 
     retStat = true; 
    } 
    else{ 
     NSLog(@"%@", error); 
    }}]; 
return retStat;} 


+(PHAssetCollection*)findAlbumAssetCollection:(NSString*)albumName{ 
PHAssetCollection *collection; 
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"title = %@", albumName]; 
collection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum 
                 subtype:PHAssetCollectionSubtypeAny 
                 options:fetchOptions].firstObject; 
return collection; 

}

2

Ответ здесь, так что кто-то может найти это в результатах поиска Google и спасти себя время я впустую: Если вы получаете эту ошибку создания актива, проверить память телефона. Я получил эту ошибку как распространение еще одной молчаливой ошибки, потому что у моего телефона было 0 байтов (да, 0 байт) доступного пространства для хранения.

Смежные вопросы