Перезагрузка UITableView - PullRequest
       1

Перезагрузка UITableView

0 голосов
/ 22 июня 2011

Я прочитал некоторые другие посты, но не нашел правильного решения, которое, кажется, работает в моем случае.У меня есть класс UITableViewController, который создается из основного делегата приложения, и он управляет другими представлениями, которые помещаются в экземпляр UINavigationController, созданный из делегата приложения.

На панели UINavigationToolBar у меня есть кнопка UISegmentedControl, которая разделена на две части: заводские и пользовательские нагрузки.У меня есть метод действия, прикрепленный к SegmentedControl, чтобы определить, когда кнопка нажата, и этот метод находится внутри класса UIViewController.Моя цель - перезагрузить представление с содержимым нового словаря, созданного из файла plist в комплекте приложений.У меня загружен словарь, и отображаемые ключи настроены в соответствующих форматах данных, но при попытке перезагрузить UITableView происходит сбой.

Это последний код, который я пытался заставить работать в моем методе действия, но он по-прежнему не работает должным образом.

- (void) action:(id)sender {

UISegmentedControl *segment = (UISegmentedControl *) sender;
if ([segment selectedSegmentIndex] == 1)
{
    NSLog(@"User Load Selected");

    NSString *userLoadFilePath = [[NSBundle mainBundle] pathForResource:@"UserLoads" ofType:@"plist"];
    NSDictionary *userLoadDictionary = [[NSDictionary alloc] initWithContentsOfFile:userLoadFilePath];
    NSArray *allKeys = [userLoadDictionary allKeys];
    keys = allKeys;
    dictionary = userLoadDictionary;

    [[self tableView] reloadData];
}

else if ([segment selectedSegmentIndex] == 0)
{
    NSLog(@"Factory Load Selected");

    NSString *factoryLoadFilePath = [[NSBundle mainBundle] pathForResource:@"AlliantPowder" ofType:@"plist"];
    NSDictionary *factoryLoadDictionary = [[NSDictionary alloc] initWithContentsOfFile:factoryLoadFilePath];
    NSArray *allKeys = [factoryLoadDictionary allKeys];
    keys = allKeys;

    [[self tableView] reloadData];
}
}

Я звоню [[self tableView] reloadData] впопытаться получить фактическую таблицу, содержащуюся в UIViewController, чтобы попытаться перезагрузить таблицу, но безуспешно.Любая помощь приветствуется, и если вам нужно больше кода, пожалуйста, спросите.Спасибо!

Андрей

------- Редактировать ----------- Вот новый код в отношении идей Чипа.Проблема все еще не решена, и приложение все еще падает.

- (void) action:(id)sender {

// Create an instance of UISegmentedControl and set it as the sending event.
UISegmentedControl *segment = (UISegmentedControl *) sender;

// Detect which button was pressed and load a new dictionary appropriately
// Checking if userLoads was selected
if ([segment selectedSegmentIndex] == 1)
{
    NSLog(@"User Load Selected");

    keys = userKeys;
    [[self tableView] reloadData];
}

// Checking if factoryLoads was selected
else if ([segment selectedSegmentIndex] == 0)
{
    NSLog(@"Factory Load Selected");

    keys = [dictionary allKeys];
    [[self tableView] reloadData];

}

[segment release];
}

1 Ответ

0 голосов
/ 22 июня 2011

Я бы предварительно загрузил словари и держал их как ивары в классе контроллера.

Держу пари, что загрузка содержимого словаря не завершена, поэтому вы фактически вызываете reloadData во время изменения данных, что вызывает ваш сбой.

Кроме того, чтение является дорогим вариантом, и вы загружаете его каждый раз, когда segementControl меняет состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...