Заполненное табличное представление не будет отображать данные - PullRequest
0 голосов
/ 17 декабря 2011

Я начинающий программист, работающий над «Полным руководством для идиота по разработке приложений для iPad и iPhone» Троя Бранта (моя проблема в главе 14, приложение «Frenemy»). На момент публикации Xcode 4.2 не существовало. Этот факт и тот факт, что книга перегружена опечатками, сделали этот опыт обучения разочаровывающим, но ценным. Увы, я столкнулся с проблемой, которую, похоже, не могу решить. Я создал табличное представление и наполнил его именами пользователей в твиттере. Я проследовал книгу до письма и даже скачал «готовый» исходный код автора. Во время выполнения все, что происходит, это мой вид таблицы и отображение панели навигации, но таблица полностью пуста. Когда я запускаю его «готовый» исходный код, происходит то же самое. Мой вопрос: есть ли конкретный метод, который я должен вызывать (например, updateInterface, например), чтобы отобразить данные, которые я велел таблице собрать, или если ...

-(void)viewDidLoad
{
    [super viewDidLoad];

    self.title = @"Frenemies";

    frenemiesTableView.dataSource = self;
    frenemiesTableView.delegate = self;   
}

... метод достаточно? Кроме того, если я должен вызывать относительный updateInterface, как мне определить этот метод? Я пользуюсь этим сайтом всю неделю и, наконец, решил зарегистрироваться и задать свой первый вопрос, потому что вы, ребята, до сих пор помогли мне найти отличные ответы. Я очень ценю любые советы.

в моем классе FrenemiesViewController.m следующее:

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    //following line tells the table to create as many rows as rootUser has frenemies
    return [rootUser.frenemies count];
}


//give the table view the cell to display for a single row

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //REUSE CELLS FOR BEST SCROLLING PERFORMANCE
    static NSString *cellId = @"cellId";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (!cell)
    {
        //create a cell only if one couldn't be reused
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    }

    //DISPLAY FRENEMY'S NAME INSIDE THE CELL
    NSDictionary *frenemyDict = [rootUser.frenemies objectAtIndex:indexPath.row];
    cell.textLabel.text = [frenemyDict objectForKey:@"name"];
    return cell;
}

Ответы [ 2 ]

0 голосов
/ 17 декабря 2011

Если вы хотите перезагрузить содержимое UITableView, используйте метод -reloadData.

0 голосов
/ 17 декабря 2011

Вы не показываете нам свой источник данных. Ваша таблица нуждается в каких-то данных для загрузки.

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.title = @"Frenemies";

    frenemiesTableView.dataSource = self;
    frenemiesTableView.delegate = self;  

    someArray = [NSArray arrayWithObjects:@"One",@"Two",@"Three",nil];
}

Возвращает количество объектов в someArray.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [someArray count];
}

Загрузить someArray в таблицу:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];    
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = [someArray objectAtIndex:indexPath.row];

    return cell;
}
...