табличное представление reloadData не работает ... - NSArray неверное резюме - PullRequest
2 голосов
/ 09 июля 2011

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

Я получилПриложение для iPad с шаблоном SplitViewController.Таким образом, RootViewController является типом UITableViewController.Мои данные хранятся в двух массивах, которые заполняются XMLParser (класс SyncController).Но tableView не показывает данные ...

Первый мой вызов синтаксического анализатора в AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // Add the split view controller's view to the window and display.


    self.window.rootViewController = self.splitViewController;
    [self.window makeKeyAndVisible];

    syncController = [[SyncController alloc] init];

    [syncController syncData];

    return YES;
}

Это работает.SyncController выполняет синтаксический анализ XML, и в конце я получил две переменные экземпляра (NSMutableArrays) SyncController, заполненные моими данными, которые я хочу передать в мой RootViewController:

rootViewController.visitorNames = [[NSArray alloc] initWithArray:self.visitorNames];
rootViewController.visitorCompanies = [[NSArray alloc] initWithArray:self.visitorCompanies];
[rootViewController.tableView reloadData];

reloadData, похоже, работает:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"comp count: %u", [self.visitorCompanies count]);
return [self.visitorCompanies count]; }

Консоль показывает правильное количество элементов ... Но тогда cellForRowAtIndexPath не вызывается

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"testghjgjggjgjggjghjghjghjghjghjghjjhgghj");
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }


// Configure the cell.
cell.textLabel.text = [self.visitorCompanies objectAtIndex:indexPath.row];

return cell;
}

Нет вывода на консоль.Поэтому я установил точку останова на numberOfRowsInSection, чтобы посмотреть переменные экземпляра

Отладочный вывод

Они кажутся нормальными, но когда вы смотрите на _dataSource для tableView,вы видите, что есть неверная сводка ...

Я думаю, именно поэтому мой TableView не работает.

Информация: если я не использую SyncController и инициализируюNSArrays с фиксированными значениями в viewDidLoad RootViewController, он отлично работает

1 Ответ

0 голосов
/ 10 июля 2011

Так как он работает нормально, когда вы не загружаете данные через SyncController, я думаю, что источник данных для табличного представления работает нормально, и вывод, полученный с помощью NSLog(), также предполагает это.

Должно быть что-то не так с SyncController.Ваш пример кода:

rootViewController.visitorNames = [[NSArray alloc]
                                   initWithArray:self.visitorNames];
rootViewController.visitorCompanies = [[NSArray alloc]
                                       initWithArray:self.visitorCompanies];
[rootViewController.tableView reloadData];

Этот код находится в SyncController, не так ли?А также:

// is self instance of SyncController, the app delegate ?
syncController = [[SyncController alloc] init];
// syncController.rootViewController = self.rootViewController ?
[syncController syncData];

Не следует ли установить это свойство перед синхронизацией данных?

В противном случае, если и делегат приложения, и контроллер корневого представления имеют свойства с именами visitorNames и visitorCompanies, вы должны отправить объекту syncController ссылку на вашего делегата приложения, чтобы заполнить массивы некоторыми данными.

Вы также можете обратиться к этому вопросу и ответам: недопустимая сводная проблемаво время отладки в Xcode… Надеюсь, это поможет.

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