Więc mam UITableView
, który reprezentuje bibliotekę wideo. Źródłem danych biblioteki jest NSMutableDictionary
, która zawiera NSMutableArray
dla każdego z kluczy. Każda z tablic zawiera tablicę ze wszystkimi informacjami dla każdej wartości.Wstawianie wiersza i usuwanie wiersza jednocześnie. UITableView
NSMutableDictionary
-> Foreach Key a NSMutableArray
, który zawiera ->NSMutableArrays
.
tableSectionData
jest moim źródłem danych.
Próbowałem wstawić wiersz w pierwszej sekcji i usunąć kolejny wiersz w innej sekcji. To jest kod, którego używam:
EDYCJA To jest nowa próba. Najpierw aktualizuję źródło danych, a następnie dodaje i usuwam odpowiednie wiersze, które są indeksowane moim źródłem danych.
[mainTableView beginUpdates];
NSMutableDictionary *clone = [[NSMutableDictionary alloc]
initWithDictionary:self.tableSectionData copyItems:YES];
for (NSString *key in [clone allKeys]) {
if([key isEqualToString:@"Videos available for download"]) {
for (NSArray *videoArray in [clone objectForKey:key]) {
if ([[videoArray objectAtIndex:0] isEqualToString:helper.videoName]) {
[[self.tableSectionData objectForKey:@"Downloaded videos"]
addObject:videoArray];
NSUInteger insertIndex = [[self.tableSectionData
objectForKey:@"Downloaded videos"]
indexOfObject:videoArray];
NSIndexPath *pathToInsert = [NSIndexPath
indexPathForRow:insertIndex inSection:0];
NSArray *indexesToAddition = [NSArray
arrayWithObject:pathToInsert];
[mainTableView insertRowsAtIndexPaths:indexesToAddition
withRowAnimation:UITableViewRowAnimationFade];
[[self.tableSectionData
objectForKey:@"Videos available for download"] removeObject:videoArray];
NSUInteger deleteIndex = [[self.tableSectionData
objectForKey:@"Videos available for download"] indexOfObject:videoArray];
NSIndexPath *pathToDelete = [NSIndexPath
indexPathForRow:deleteIndex inSection:1];
NSArray *indexesToDeletion = [NSArray arrayWithObject:
pathToDelete];
[mainTableView deleteRowsAtIndexPaths:indexesToDeletion
withRowAnimation:UITableViewRowAnimationFade];
}
}
}
}
[mainTableView endUpdates];
myślałem, że to będzie działać, ponieważ muszę najpierw usunąć wiersz, jeśli chcę wstawić jeden (w przypadku chcę zrobić zarówno.)
Specyficzny błędu jest następujący:
'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (4) must be equal to the number of rows contained in that section before the update (3), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
Wiem, co mówi ten błąd, że nie mam odpowiedniej liczby wierszy w sekcji, ale nie widzę mojego błędu na kodzie i zalogowałem się do źródła danych i odpowiada ono żądanemu wynikowi.
Każda pomoc i sugestie będą mile widziane!
ja już próbowałem, ale nie działa. Będę trzymać się aktualizacji początku i końca! – Joze