我从ALAssetLibrary
收集照片并将其显示在UICollectionView
中。我添加了一个名为ALAssetsLibraryChangedNotification
的通知来处理照片更改,并在发布通知时调用showLatestPhotos。
我的照片收集功能如下:
- (void)showLatestPhotos {
_latestPhotos = [NSMutableArray array];
// get photo from asset and inset into _latestPhotos
[_latestPhotos insertObject:...];
[_collectionView reloadData];
}
问题在于,如果我执行屏幕截图(同时单击主页和电源),ALAssetsLibraryChangedNotification将发布两次以上,即showLatestPhtots将执行两次,第二次_latestPhotos设置为空时使用_latestPhotos = [NSMutableArray array]
,第一次调用中由cellForItemAtIndexPath
触发的collectionView's
数据源的[_collectionView reloadData]
仍然被调用,当它调用[_latestPhotos objectAtIndex:],
时,应用程序崩溃。有谁知道如何解决这个错误?
答案 0 :(得分:0)
使用它可以使用
if ([_latestPhotos containsObject:yourobject] == NO)
{
// Do something
_latestPhotos = [NSMutableArray array];
// get photo from asset and inset into _latestPhotos
[_latestPhotos insertObject:...];
[_collectionView reloadData];
}
答案 1 :(得分:0)
我终于找到了解决方案。由于单个照片更改(例如屏幕截图)触发的ALAssetsLibraryChangedNotification的时间间隔大约为0.1秒,我只是等待它们全部到达并使用performSelector: withObject: afterDelay:
执行showLatestPhotos一次并使用{{1取消先前不必要的调用无论如何,谢谢你回答我的问题。