2015-07-03 5 views
0

Я использую следующий код, чтобы попытаться сохранить новый образ на PHAssetCollection, в частности, Фотопленка (ака библиотека пользователя):Сохранить UIImage в PHAssetCollection

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
    PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image]; 

    PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil]; 
    PHAssetCollection *assetCollection = fetchResult[0]; 

    if (assetCollection) { 
     PHAssetCollectionChangeRequest *assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection]; 
     [assetCollectionChangeRequest addAssets:@[[assetChangeRequest placeholderForCreatedAsset]]]; 
    } 
} completionHandler:^(BOOL success, NSError *error) { 
    if (!success) { 
     NSLog(@"Error creating asset: %@", error); 
    } 
}]; 

Я всегда получаю сообщение об ошибке.

Все объекты в выполнение блока выглядят отлично:

(lldb) po image 
<UIImage: 0x174289ec0>, {1080, 1466} 

(lldb) po assetCollection 
<PHAssetCollection: 0x1741d5540> F6705124-D49B-4FDC-9191-7E84CFCCD148/L0/040 Camera Roll assetCollectionType=2/209 

(lldb) po assetCollectionChangeRequest 
<PHAssetCollectionChangeRequest: 0x170264640> title=(null) hasAssetChanges=1 

И сообщение об ошибке довольно бесполезно:

The operation couldn’t be completed. (Cocoa error -1.) 

Как я могу успешно сохранить свой новый образ в библиотеке пользователя? Благодарю.

ответ

1

В общем, вы делаете вещи в неправильном порядке; вы не должны делать выборку внутри блока performChanges. И вам не обязательно, в любом случае. Не собирайте коллекцию вообще. Просто создать фотографию, просто и ясно, точно так, как в первой строке - за исключением того, что вам не нужно даже сохранить ссылку на запрос изменения:

[PHAssetChangeRequest creationRequestForAssetFromImage:image]; 

... и остановиться. В этот момент фотография добавлена ​​в рулон камеры.

Я просто попробовал это, и он отлично работает.

(Конечно, я предполагаю, что вы уже получили необходимые разрешения от пользователя ...!)

+0

Спасибо, матовый. Меня смутило http://stackoverflow.com/questions/26065774/which-phassetcollection-to-use-for-saving-an-image – mkc842

+0

Да, но это _question_. У него проблемы, потому что он делает это неправильно - точно так же, как вы. _answer_ - это то, что вы хотите посмотреть: http://stackoverflow.com/a/26915282/341994 На самом деле, вот откуда я получил свой ответ! (Конечно, я это проверял сам). – matt

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