Skip to content

Commit febc6b3

Browse files
committed
优化iCloud同步失败的判断
1 parent 591c595 commit febc6b3

5 files changed

Lines changed: 31 additions & 25 deletions

File tree

TZImagePickerController/TZImagePickerController/TZAssetCell.m

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,11 @@ - (void)requestBigImage {
168168
}
169169

170170
_bigImageRequestID = [[TZImageManager manager] requestImageDataForAsset:_model.asset completion:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
171-
if (!imageData && [info[PHImageResultIsInCloudKey] boolValue]) {
172-
self.model.iCloudFailed = YES;
173-
if (self.didSelectPhotoBlock) {
174-
self.didSelectPhotoBlock(YES);
175-
self.selectImageView.image = self.photoDefImage;
176-
}
171+
BOOL iCloudSyncFailed = !imageData && [TZCommonTools isICloudSyncError:info[PHImageErrorKey]];
172+
self.model.iCloudFailed = iCloudSyncFailed;
173+
if (iCloudSyncFailed && self.didSelectPhotoBlock) {
174+
self.didSelectPhotoBlock(YES);
175+
self.selectImageView.image = self.photoDefImage;
177176
}
178177
[self hideProgressView];
179178
} progressHandler:^(double progress, NSError *error, BOOL *stop, NSDictionary *info) {
@@ -194,13 +193,12 @@ - (void)requestBigImage {
194193
}];
195194
if (_model.type == TZAssetCellTypeVideo) {
196195
[[TZImageManager manager] getVideoWithAsset:_model.asset completion:^(AVPlayerItem *playerItem, NSDictionary *info) {
197-
if (!playerItem && [info[PHImageResultIsInCloudKey] boolValue]) {
196+
BOOL iCloudSyncFailed = !playerItem && [TZCommonTools isICloudSyncError:info[PHImageErrorKey]];
197+
self.model.iCloudFailed = iCloudSyncFailed;
198+
if (iCloudSyncFailed && self.didSelectPhotoBlock) {
198199
dispatch_async(dispatch_get_main_queue(), ^{
199-
self->_model.iCloudFailed = YES;
200-
if (self->_didSelectPhotoBlock) {
201-
self->_didSelectPhotoBlock(YES);
202-
self->_selectImageView.image = self.photoDefImage;
203-
}
200+
self.didSelectPhotoBlock(YES);
201+
self.selectImageView.image = self.photoDefImage;
204202
});
205203
}
206204
}];

TZImagePickerController/TZImagePickerController/TZImagePickerController.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@
305305
+ (NSDictionary *)tz_getInfoDictionary;
306306
+ (BOOL)tz_isRightToLeftLayout;
307307
+ (void)configBarButtonItem:(UIBarButtonItem *)item tzImagePickerVc:(TZImagePickerController *)tzImagePickerVc;
308+
+ (BOOL)isICloudSyncError:(NSError *)error;
308309
@end
309310

310311

TZImagePickerController/TZImagePickerController/TZImagePickerController.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,14 @@ + (void)configBarButtonItem:(UIBarButtonItem *)item tzImagePickerVc:(TZImagePick
913913
[item setTitleTextAttributes:textAttrs forState:UIControlStateNormal];
914914
}
915915

916+
+ (BOOL)isICloudSyncError:(NSError *)error {
917+
if (!error) return NO;
918+
if ([error.domain isEqualToString:@"CKErrorDomain"] || [error.domain isEqualToString:@"CloudPhotoLibraryErrorDomain"]) {
919+
return YES;
920+
}
921+
return NO;
922+
}
923+
916924
@end
917925

918926

TZImagePickerController/TZImagePickerController/TZPhotoPreviewCell.m

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,6 @@ - (void)setModel:(TZAssetModel *)model {
170170
if (model.type == TZAssetModelMediaTypePhotoGif) {
171171
// 先显示缩略图
172172
[[TZImageManager manager] getPhotoWithAsset:model.asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
173-
BOOL iCloudSyncFailed = !photo && [info[PHImageResultIsInCloudKey] boolValue];
174-
self.iCloudErrorLabel.hidden = !iCloudSyncFailed;
175-
self.iCloudErrorIcon.hidden = !iCloudSyncFailed;
176-
if (self.iCloudSyncFailedHandle) {
177-
self.iCloudSyncFailedHandle(model.asset, iCloudSyncFailed);
178-
}
179173
if (photo) {
180174
self.imageView.image = photo;
181175
}
@@ -188,6 +182,13 @@ - (void)setModel:(TZAssetModel *)model {
188182
[[TZImageManager manager] getOriginalPhotoDataWithAsset:model.asset progressHandler:^(double progress, NSError *error, BOOL *stop, NSDictionary *info) {
189183
progress = progress > 0.02 ? progress : 0.02;
190184
dispatch_async(dispatch_get_main_queue(), ^{
185+
BOOL iCloudSyncFailed = [TZCommonTools isICloudSyncError:error];
186+
self.iCloudErrorLabel.hidden = !iCloudSyncFailed;
187+
self.iCloudErrorIcon.hidden = !iCloudSyncFailed;
188+
if (self.iCloudSyncFailedHandle) {
189+
self.iCloudSyncFailedHandle(model.asset, iCloudSyncFailed);
190+
}
191+
191192
self.progressView.progress = progress;
192193
if (progress >= 1) {
193194
self.progressView.hidden = YES;
@@ -223,7 +224,7 @@ - (void)setAsset:(PHAsset *)asset {
223224

224225
_asset = asset;
225226
self.imageRequestID = [[TZImageManager manager] getPhotoWithAsset:asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
226-
BOOL iCloudSyncFailed = !photo && [info[PHImageResultIsInCloudKey] boolValue];
227+
BOOL iCloudSyncFailed = !photo && [TZCommonTools isICloudSyncError:info[PHImageErrorKey]];
227228
self.iCloudErrorLabel.hidden = !iCloudSyncFailed;
228229
self.iCloudErrorIcon.hidden = !iCloudSyncFailed;
229230
if (self.iCloudSyncFailedHandle) {
@@ -442,7 +443,7 @@ - (void)configMoviePlayer {
442443

443444
if (self.model && self.model.asset) {
444445
[[TZImageManager manager] getPhotoWithAsset:self.model.asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
445-
BOOL iCloudSyncFailed = !photo && [info[PHImageResultIsInCloudKey] boolValue];
446+
BOOL iCloudSyncFailed = !photo && [TZCommonTools isICloudSyncError:info[PHImageErrorKey]];
446447
self.iCloudErrorLabel.hidden = !iCloudSyncFailed;
447448
self.iCloudErrorIcon.hidden = !iCloudSyncFailed;
448449
if (self.iCloudSyncFailedHandle) {
@@ -454,7 +455,7 @@ - (void)configMoviePlayer {
454455
}];
455456
[[TZImageManager manager] getVideoWithAsset:self.model.asset completion:^(AVPlayerItem *playerItem, NSDictionary *info) {
456457
dispatch_async(dispatch_get_main_queue(), ^{
457-
BOOL iCloudSyncFailed = !playerItem && [info[PHImageResultIsInCloudKey] boolValue];
458+
BOOL iCloudSyncFailed = !playerItem && [TZCommonTools isICloudSyncError:info[PHImageErrorKey]];
458459
self.iCloudErrorLabel.hidden = !iCloudSyncFailed;
459460
self.iCloudErrorIcon.hidden = !iCloudSyncFailed;
460461
if (self.iCloudSyncFailedHandle) {

TZImagePickerController/TZImagePickerController/TZVideoPlayerController.m

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ - (void)viewWillDisappear:(BOOL)animated {
6464

6565
- (void)configMoviePlayer {
6666
[[TZImageManager manager] getPhotoWithAsset:_model.asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
67-
if (!photo && [info[PHImageResultIsInCloudKey] boolValue]) {
68-
self.iCloudErrorView.hidden = NO;
69-
}
67+
BOOL iCloudSyncFailed = !photo && [TZCommonTools isICloudSyncError:info[PHImageErrorKey]];
68+
self.iCloudErrorView.hidden = !iCloudSyncFailed;
7069
if (!isDegraded && photo) {
7170
self->_cover = photo;
7271
self->_doneButton.enabled = YES;
73-
self.iCloudErrorView.hidden = YES;
7472
}
7573
}];
7674
[[TZImageManager manager] getVideoWithAsset:_model.asset completion:^(AVPlayerItem *playerItem, NSDictionary *info) {

0 commit comments

Comments
 (0)