[tableView reloadData];не перезагружается, пока не вернется к корневому контроллеру - PullRequest
0 голосов
/ 02 мая 2011

Мы с другом работаем над приложением со списком продуктов и испытываем некоторые проблемы с [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");
}

Любая помощь будет высоко ценится!Заранее спасибо!

1 Ответ

1 голос
/ 03 мая 2011

решаемая.

Это просто должно было быть:

[self.tableView reloadData];
...