簡體   English   中英

ios-使用PHAssetChangeRequest添加到相冊時照片重復

[英]ios - Photo duplicated when adding to an album using PHAssetChangeRequest

使用PHAssetChangeRequest將照片添加到相冊時,照片會在相機膠卷中復制,而不僅僅是將現有照片添加到相冊。 有人遇到過這個問題嗎? 我們要做的就是將現有照片添加到相冊中。

謝謝

豐富

更新以刪除不同的版本,以顯示使用重復版本的版本,更易於閱讀<<

// Save to the album
                       [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
            NSLog(@"Here 1");
            NSData *imageData = UIImageJPEGRepresentation(imTransfer, 0);
            NSLog(@"Here 2");
            PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:[UIImage imageWithData:imageData]];
            placeholder = [assetRequest placeholderForCreatedAsset];
            NSLog(@"Here 3");

            photosAsset = [PHAsset fetchAssetsInAssetCollection:collection options:nil];
            PHAssetCollectionChangeRequest *albumChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection
                                                                                                                          assets:photosAsset];
             NSLog(@"Here 4");
            [albumChangeRequest addAssets:@[placeholder]];
        } completionHandler:^(BOOL success, NSError *error) {
            if (success)
            {
                NSLog(@"SUCCESS!!!!");
            }
            else
            {
                NSLog(@"%@", error);
            }
        }];

您正在創建新資產。 如果要使用相機膠卷中的現有照片,則不應這樣做。

我假設您正在使用UIImagePickerController選擇照片。 以下是從相機膠卷獲取圖像資產詳細信息並將其添加到自定義集合的代碼:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
    [picker dismissViewControllerAnimated:YES completion:nil];

    //Custom function to get custom album
    PHAssetCollection *collection = [self getMyAlbum];

    NSError *error;
    __block NSString *localID;

    PHAsset *asset;
    if (info[UIImagePickerControllerReferenceURL]) {

        NSURL *imageUrl = info[UIImagePickerControllerReferenceURL];
        PHFetchResult *imageFetchResult = [PHAsset fetchAssetsWithALAssetURLs:@[imageUrl] options:nil];
        asset = [imageFetchResult firstObject];
        localID = [asset localIdentifier];
    }

    if(localID) {

        [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

            PHAssetCollectionChangeRequest *changeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];
            [changeRequest addAssets:@[asset]];

        } error:&error];

    }

}

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM