У меня есть UITableView, который представляет элементы, которые были получены как xml, а затем отсортированы по разделам и строкам. Я отслеживаю, какие элементы были отображены на экране, используя indexPathsForVisibleRows и удерживаю его в NSMutableSet:
@interface MainFeedTableViewController () <UIGestureRecognizerDelegate>
{
NSMutableSet *viewedCellsIndexPaths;
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
...
viewedCellsIndexPaths = [[NSMutableSet alloc] init];
...
}
- (void) trackVisibleCells {
// create array of currently displayed cells
NSArray *visibleCells = [_mainFeed indexPathsForVisibleRows];
// add cells to viewedCells set
[viewedCellsIndexPaths addObjectsFromArray:visibleCells];
// get unviewed cells count
NSUInteger cellsCount = 0;
NSInteger sections = [_mainFeed numberOfSections];
for (int i = 0; i < sections; i++) {
cellsCount += [_mainFeed numberOfRowsInSection:i];
}
NSUInteger unViewedCellsCount = cellsCount - [viewedCellsIndexPaths count];
// pass unviewed cells count to cell
if (self.catchupCellDelegate) {
[self.catchupCellDelegate updateUnreadCellsCount:unViewedCellsCount];
}
, и теперь я хочу открыть новый вид, который будет отображать только элементы, которые еще не были отображается.
На основании этого ответа Я попытался создать еще один набор из источника данных, а затем [allData minusSet:viewedCellsIndexPaths]
. Проблема просматриваетсяCellsIndexPaths содержит IndexPaths, а источник данных содержит, в общем, данные.
Я попытался добавить целые таблицы indexPaths к другому набору внутри CellForRowAtIndexPath, но это дало мне только видимые, а не пути к индексам всей таблицы.
Затем я попытался использовать NSMutableOrderedSet для отследите ячейки, которые были видимы, а затем вызовите его LastObject, чтобы выяснить, какая ячейка была последней просмотренной, и получить доступ к источнику данных из этого индекса:
NSIndexPath *lastIndex = (NSIndexPath *)viewedCellsIndexPaths.lastObject;
, но я получил исключение [__NSSetM lastObject]: нераспознанный селектор отправлен на экземпляр 0x2837acb2.
звучит как ошибка в языке , которую я не могу найти способ обойти.
Моя последняя попытка на основе этого ответа было:
NSMutableArray *unviewedCellsData = [NSMutableArray arrayWithArray:sectionOrderedFeed];
for (NSIndexPath *indexPath in viewedCellsIndexPaths) {
Items *item = [[sectionOrderedFeed objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
[unviewedCellsData removeObject:item];
}
Но после итерации unViewedCellsData в точности совпадает с sectionOrderedFeed.
Здесь есть какая-нибудь помощь?