Почему метод addAsset ALAssetsGroup добавляет изображения в список фотографий, а не в указанный альбом, когда библиотека фотографий iCloud открыта

Способ сохранения изображения и метаданных в пользовательский альбом:

(Поскольку PhotosKit не может сохранить метаданные, поэтому я выбираю ALAssetsLibrary, чтобы сделать это.)

- (void)saveToAlbumWithMetadata:(NSDictionary *)metadata
                  imageData:(NSData *)imageData
            customAlbumName:(NSString *)customAlbumName
            completionBlock:(void (^)(void))completionBlock
               failureBlock:(void (^)(NSError *error))failureBlock 
{
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    __weak ALAssetsLibrary *weakSelf = assetsLibrary;
    void (^AddAsset)(ALAssetsLibrary *, NSURL *) = ^(ALAssetsLibrary *assetsLibrary, NSURL *assetURL) {
    [assetsLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
        [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
            if ([[group valueForProperty:ALAssetsGroupPropertyName] isEqualToString:customAlbumName]) {
                [group addAsset:asset];
                NSLog(@"Added %@ to %@", [[asset defaultRepresentation] filename], customAlbumName);
                if (completionBlock) {
                    completionBlock();
                }
            }
        } failureBlock:^(NSError *error) {
            if (failureBlock) {
                failureBlock(error);
            }
        }];
    } failureBlock:^(NSError *error) {
        if (failureBlock) {
            failureBlock(error);
        }
    }];
   };
  [assetsLibrary writeImageDataToSavedPhotosAlbum:imageData metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
    if (customAlbumName) {
        [assetsLibrary addAssetsGroupAlbumWithName:customAlbumName resultBlock:^(ALAssetsGroup *group) {
            if (group) {
                [weakSelf assetForURL:assetURL resultBlock:^(ALAsset *asset) {
                    [group addAsset:asset];
                    if (completionBlock) {
                        completionBlock();
                    }
                } failureBlock:^(NSError *error) {
                    if (failureBlock) {
                        failureBlock(error);
                    }
                }];
            } else {
                AddAsset(weakSelf, assetURL);
            }
        } failureBlock:^(NSError *error) {
            AddAsset(weakSelf, assetURL);
        }];
    } else {
        if (completionBlock) {
            completionBlock();
        }
    }
  }];
}

МетодcreateJJWAlbum будет вызван, чтобы сначала создать пользовательский альбом:

- (PHAssetCollection *)createJJWAlbum {
PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (PHAssetCollection * assetCollection in assetCollections) {
    if ([assetCollection.localizedTitle isEqualToString:kJJWAlbumName]) {
        return assetCollection;
    }
}

__block NSString *assetCollectionLocalIdentifier = nil;
NSError *error = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
    assetCollectionLocalIdentifier = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:kJJWAlbumName].placeholderForCreatedAssetCollection.localIdentifier;
} error:&error];

if (error)return nil;

return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[assetCollectionLocalIdentifier] options:nil].lastObject;
}

Моя проблема в том, что когда iCloud Photo Library закрыта, все работает как положено, но при открытии изображение будет добавлено только в системную камеру roll

Упомянутое здесь решение было опробовано, не повезло.

Кто-нибудь поможет мне? Спасибо

0 ответов

Другие вопросы по тегам