解決iOS8下ALAssetsLibrary建立相簿的bug,alassetslibrary

來源:互聯網
上載者:User

解決iOS8下ALAssetsLibrary建立相簿的bug,alassetslibrary

說到ALAssetsLibrary,相信搞iOS開發的大都知道它,在iOS上做過相簿相關功能的應該對這個都比較熟悉了,用它來操作訪問相簿是很方便的。但是,,,,自從iOS8發布後,ALAssetsLibrary在Stack Overflow上被各種討論了。因為在iOS8上用這個庫建立相簿會有個bug:建立相簿,手動刪除它,再用這個庫去建立剛被刪除的相簿,這個時候方法回調是不會跑fail模組的,它走的是正常流程,但是帶回來的group卻是nil。

- (void)addAssetsGroupAlbumWithName:(NSString *)name resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock 

於是網上各種搜,也看到Stack Overflow各種各樣的解決方案,反正我是沒找到有效解決辦法。無意中在文檔中看到了這個:



於是就順著文檔找下去,最後得出有效解決方案,廢話不多說,直接貼代碼了(到了下班點了)。

-(void)saveImageToXYAlbum:(UIImage*)image completion:(SaveImageCompletion)completion{    if(image){        __weak ALAssetsLibrary *weakAssetsLibrary = assetsLibrary;        __weak XYWallPaperHelper *weakSelf = self;        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{                        if(TT_IS_IOS8_AND_UP){                PHPhotoLibrary* photoLibrary = [PHPhotoLibrary sharedPhotoLibrary];                [photoLibrary performChanges:^{                    PHFetchResult* fetchCollectionResult;                    PHAssetCollectionChangeRequest* collectionRequest;                    NSString *albumIdentifier = [weakSelf xyWallPaperAlbumIdentifier];                    if(albumIdentifier){                        fetchCollectionResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[albumIdentifier] options:nil];                        PHAssetCollection* exisitingCollection = fetchCollectionResult.firstObject;                        collectionRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:exisitingCollection];                    }else{                        fetchCollectionResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[XYWallPaperAlbum] options:nil];                        // Create a new album                        if ( !fetchCollectionResult || fetchCollectionResult.count==0 ){                            collectionRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:XYWallPaperAlbum];                            [weakSelf saveXYWallPaperAblumIdentifier:collectionRequest.placeholderForCreatedAssetCollection.localIdentifier];                        }                    }                    PHAssetChangeRequest* createAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];                    [collectionRequest addAssets:@[createAssetRequest.placeholderForCreatedAsset]];                                    } completionHandler:^(BOOL success, NSError *error){                    completion(error);                }];            }else{                [weakAssetsLibrary saveImage:image toAlbum:XYWallPaperAlbum withCompletionBlock:completion];            }        });    }}

這裡有個地方需要注意,建立相簿後要儲存一下localIdentifier,因為下次再擷取AssetCollection的時候需要用到它。如果每次都用相簿名去試圖擷取到之前建立的同名AssetCollection,不會得到結果的。就這裡需要注意一下,其他倒沒什麼,代碼也比較簡單。  上面代碼部分針對iOS8以下版本的代碼邏輯,這裡就不贅述了,網上一大把。






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.