2014-09-26 1 views
17

iOS 8의 Photos.framework에서 Safari에서 이미지를 오래 누르고 "이미지 저장"과 같은 방법으로 UIImage를 사용자의 사진 라이브러리에 저장하려고합니다. iOS 7에서는 ALAssetLibrary의 writeImageToSavedPhotosAlbum:metadata:completionBlock을 호출하면됩니다.이미지 저장에 사용할 PHAssetCollection은 무엇입니까?

iOS 8의 경우 PHAsset을 추가하기 위해 자산 컬렉션을 선택해야하지만 사용자의 "카메라 롤"에 저장하는 것과 가장 가까운 PHAssetCollection을 파악할 수 없습니다 (단, 정말로, iOS 8에서)

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
    PHAssetChangeRequest *newAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image]; 
    newAssetRequest.creationDate = time; 
    newAssetRequest.location = location; 

    PHObjectPlaceholder *placeholderAsset = newAssetRequest.placeholderForCreatedAsset; 

    PHAssetCollectionChangeRequest *addAssetRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:WHICH_ASSET_COLLECTION]; 
    addAssetRequest addAssets:@[placeholderAsset]; 

} completionHandler:^(BOOL success, NSError *error) { 
    NSLog(@"Success: %d", success); 
}]; 

"최근 추가 된"스마트 앨범에 액세스하려고했지만 새로운 콘텐츠를 추가 할 수 없습니다.

답변

29

PHAssetCollection을 사용할 필요가 없습니다. 그냥 다음과 같이 추가 :

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
     PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:<#your photo here#>]; 
    } completionHandler:^(BOOL success, NSError *error) { 
     if (success) { 
      <#your completion code here#> 
     } 
     else { 
      <#figure out what went wrong#> 
     } 
    }]; 
+0

완성 처리기에서 새 자산을 어떻게 얻습니까? –

+1

문서에 따르면'@property (nonatomic, strong, readonly) PHObjectPlaceholder * placeholderForCreatedAsset'를 사용하면 "동일한 변경 블록 내에서 변경 요청으로 생성 된 자산을 참조해야하는 경우이 속성을 사용하십시오. 다음 코드를 사진 라이브러리 변경 블록에 포함하면 에셋을 만든 다음 컬렉션에 추가합니다. " 자리 표시 자에 대한 자세한 내용은 [docs] (https://developer.apple.com)을 참조하십시오. /library/prerelease/ios/documentation/Photos/Reference/PHObjectPlaceholder_Class/index.html). –

+0

이미 개체 틀을 시도했습니다. 이 예는 자리 표시 자 객체를 앨범 변경 요청에 추가하지만 여러 자산을 유지합니다. 자리 표시 자 객체를 배열에 추가 할 수 없습니다. –

6

실제로 8.1에서는 카메라 롤이 돌아 왔습니다. SmartAlbumUserLibrary라는 하위 유형의 스마트 앨범입니다.

+0

당신은 자리 표시자를 이해하는 데 아주 잘 해왔습니다. – matt

+0

만약 그가'ALAssetCollection'에 그것을 추가하려고한다면 그것은 여전히 ​​읽기 전용 일 것이고 추가 될 수 없을 것이라고 생각합니다. 내 대답과 같이 추가하면 원하는 것을 할 수 있습니다. –

+0

@SushiGrassJacob 카메라 롤에 쓸 수 있습니다. – matt