gpt4 book ai didi

Objective-C:如何将 NSIndexSet 转换为 NSIndexPath

转载 作者:行者123 更新时间:2023-12-04 00:36:06 24 4
gpt4 key购买 nike

我想将 NSIndexSet 对象转换为 NSIndexPath,效果如链接:https://developer.apple.com/reference/photos/phphotolibrarychangeobserver?language=objc

- (void)photoLibraryDidChange:(PHChange *)changeInfo {
// Photos may call this method on a background queue;
// switch to the main queue to update the UI.
dispatch_async(dispatch_get_main_queue(), ^{
// Check for changes to the displayed album itself
// (its existence and metadata, not its member assets).
PHObjectChangeDetails *albumChanges = [changeInfo changeDetailsForObject:self.displayedAlbum];
if (albumChanges) {
// Fetch the new album and update the UI accordingly.
self.displayedAlbum = [albumChanges objectAfterChanges];
self.navigationController.navigationItem.title = self.displayedAlbum.localizedTitle;
}

// Check for changes to the list of assets (insertions, deletions, moves, or updates).
PHFetchResultChangeDetails *collectionChanges = [changeInfo changeDetailsForFetchResult:self.albumContents];
if (collectionChanges) {
// Get the new fetch result for future change tracking.
self.albumContents = collectionChanges.fetchResultAfterChanges;

if (collectionChanges.hasIncrementalChanges) {
// Tell the collection view to animate insertions/deletions/moves
// and to refresh any cells that have changed content.
[self.collectionView performBatchUpdates:^{
NSIndexSet *removed = collectionChanges.removedIndexes;
if (removed.count) {
[self.collectionView deleteItemsAtIndexPaths:[self **indexPathsFromIndexSet**:removed]];
}
NSIndexSet *inserted = collectionChanges.insertedIndexes;
if (inserted.count) {
[self.collectionView insertItemsAtIndexPaths:[self indexPathsFromIndexSet:inserted]];
}
NSIndexSet *changed = collectionChanges.changedIndexes;
if (changed.count) {
[self.collectionView reloadItemsAtIndexPaths:[self indexPathsFromIndexSet:changed]];
}
if (collectionChanges.hasMoves) {
[collectionChanges enumerateMovesWithBlock:^(NSUInteger fromIndex, NSUInteger toIndex) {
NSIndexPath *fromIndexPath = [NSIndexPath indexPathForItem:fromIndex inSection:0];
NSIndexPath *toIndexPath = [NSIndexPath indexPathForItem:toIndex inSection:0];
[self.collectionView moveItemAtIndexPath:fromIndexPath toIndexPath:toIndexPath];
}];
}
} completion:nil];
} else {
// Detailed change information is not available;
// repopulate the UI from the current fetch result.
[self.collectionView reloadData];
}
}
});
}

有人知道示例中 indexPathsFromIndexSet: 方法的实现吗?谢谢!

最佳答案

您可以在 IndexSet 的枚举器的帮助下将 NSIndexSet 转换为 IndexPath 数组,如下所示:

NSMutableArray *allIndexPaths = [[NSMutableArray alloc] init];

[indexSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop)
{
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:idx inSection:0];
[allIndexPaths addObject:indexPath];
}];

NSLog(@"All Index Path : %@",allIndexPaths);

关于Objective-C:如何将 NSIndexSet 转换为 NSIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42217639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com