Как получить указатель на новый PHCollectionList (или PHAssetCollection) после создания

Я пытаюсь создать "папку" Photo и вернуть на нее указатель. Это возможно? Ниже приведен код, который у меня есть до сих пор. Спасибо.

- (PHCollectionList *) CreatePhotoFolder: (NSString *) folderName
{
    [[PHPhotoLibrary sharedPhotoLibrary]
        performChanges:^{
            // Create the folder
            [PHCollectionListChangeRequest creationRequestForCollectionListWithTitle: folderName];
        }
        completionHandler:^(BOOL success, NSError *error) {
            if (!success) { NSLog(@"Error creating Folder: %@", error); }
            else {
                // How do I return the new PHCollectionList* for the new folder?
            }
        }
     ];
}

person NoBot    schedule 28.08.2015    source источник


Ответы (1)


Сначала вам нужно получить локальный идентификатор по заполнителю.

    __block NSString * localId;
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        PHAssetCollectionChangeRequest *assetCollectionChangeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"XD"];
        localId = [[assetCollectionChangeRequest placeholderForCreatedAssetCollection] localIdentifier];
    } completionHandler:^(BOOL success, NSError *error) {
        if (!success) {
            NSLog(@"Error creating album: %@", error);
        } else {
            NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
            [prefs setObject:localId forKey:@"collection"];
            [prefs synchronize];
        }
    }];

а затем получить PHAssetCollection по этому локальному идентификатору

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString* colletionId = [prefs stringForKey:@"collection"];
if(colletionId == nil) {
    colletionId = @"";
}

PHFetchResult *result = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[colletionId]  options:nil];
self.assetCollection = [result firstObject];
person Rigel Chen    schedule 16.09.2015
comment
Благодарю вас! Я смог адаптировать ваш образец для своих нужд. Есть ли причина, по которой вы сохраняете localId в * prefs, а не просто возвращаете указатель, используя [result firstObject]? - person NoBot; 29.09.2015
comment
Я храню его, потому что мне нужно использовать его в другом месте. Вы можете использовать указатель напрямую. - person Rigel Chen; 29.09.2015