Мы с другом работаем над приложением со списком продуктов и испытываем некоторые проблемы с [tableView reloadData] ;.Мы храним наши списки покупок в списках и добавляем подпредставление товаров.Когда вы покидаете это подпредставление, чтобы вернуться к списку, список не содержит новых элементов, даже если мы обновляем plist и вызываем reloadData в viewWillAppear.Это работает, хотя;если мы вернемся к основному списку всех списков, а затем вернемся к конкретному списку, в который мы только что добавили элементы, то элементы отобразятся.Точно так же мы хотим удалить элементы из списка, просто выбрав строку и поставив галочку рядом с элементом.Список не обновляется автоматически при выборе строки, хотя мы также вызываем reloadData в didSelectRowAtIndexPath.Опять же, изменение появляется, если мы вернемся к основному списку, а затем вернемся к отдельному списку.Я проверил, и делегат и источник данных в файлах пера правильно связаны с владельцем файла.
Вот код для viewWillAppear:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// THIS IS WHERE YOU PASS THE VARIABLE
iGrocerAppDelegate *passTest = [[UIApplication sharedApplication] delegate];
NSString *listName = [passTest passList];
[passTest setPassList:listName];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *fullListName = [NSString stringWithFormat:@"%@.plist", listName];
NSString *file = [[paths lastObject] stringByAppendingPathComponent:fullListName];
self.list = [[NSArray alloc] initWithContentsOfFile:file];
[listTableView reloadData];
}
и didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:
indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
int row = [indexPath row];
NSString *deleteItem = [self.list objectAtIndex:row];
[self.itemsToDelete addObject:deleteItem];
// RECEIVE PASSED VARIABLE
iGrocerAppDelegate *test = (iGrocerAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *listName = [test passList];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *fullListName = [NSString stringWithFormat:@"%@.plist", listName];
NSString *file = [[paths lastObject] stringByAppendingPathComponent:fullListName];
//NSMutableArray *groceryLists = [[NSMutableArray alloc] initWithContentsOfFile:file];
//NSMutableArray *groceryList1 = [[NSMutableArray alloc] initWithContentsOfFile:file];
NSMutableArray *groceryList = [[NSMutableArray alloc] initWithContentsOfFile:file];
NSMutableArray *removeFromList = self.itemsToDelete;
int itemCount = [removeFromList count];
NSLog(@"Count: %d", itemCount);
for(int i=0; i < itemCount; i++) {
NSString *item = [removeFromList objectAtIndex:i];
NSLog(@"%@", item);
[groceryList removeObject:item];
NSLog(@"Middle ARRAY: %@", groceryList);
//[groceryList addObjectsFromArray: addToList];
}
NSLog(@"FINAL ARRAY: %@", groceryList);
if(![groceryList writeToFile:file atomically:YES]) {
NSLog(@"unsuccessful");
} else {
NSLog(@"successful");
}
NSLog(@"file name: %@",file);
self.list = [[NSArray alloc] initWithContentsOfFile:file];
NSLog(@"updated grocery list: %@", self.list);
[listTableView beginUpdates];
//[listTableView reloadData];
[listTableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
[listTableView endUpdates];
printf("list table view reloaded");
}
Любая помощь будет высоко ценится!Заранее спасибо!