Пустые ячейки UITableView

#objective-c #ios #ios4

#objective-c #iOS #ios4

Вопрос:

Я пытаюсь восстановить после случайного удаления моего файла .m. Кто-нибудь видит, что я делаю неправильно, из-за чего все мои ячейки отображаются пустыми?

.h

 #import <UIKit/UIKit.h>
@interface FirstViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
}
@end
  

.m

 #import "FirstViewController.h"
#import "Shared.h"
#import "Message.h"

@implementation FirstViewController

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"CellIdentifier";

    // Dequeue or create a cell of the appropriate type.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
        cell.textLabel.text = @"Foo"; 
    return cell;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog([NSString stringWithFormat:@"Number of rows %i", [[Shared sharedInstance].messages count]]);
    //this comes back as 10
    return [[Shared sharedInstance].messages count];
}
  

Обновить:

Я связал это со странной проблемой. В следующем я выхожу из системы как 10, но если я возвращаю i, строки отображаются пустыми. Если я верну 10, как показано ниже, это сработает.

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    #warning Incomplete method implementation.
    // Return the number of rows in the section.
    NSInteger i = [[Shared sharedInstance].messages count];
    NSLog([NSString stringWithFormat:@"Number of rows %i", i]);
    return 10;
}
  

Еще одно обновление:

Хорошо, я подобрался ближе. Кажется, что, хотя reloaddata вызывается, когда я выполняю отладчик, он, похоже, не перезагружается должным образом. Вот почему жестко закодированное число работало, если я использовал жестко закодированную строку образца для каждой строки. При первой загрузке количество строк было бы равно нулю, а поскольку reloaddata не работает, при следующей загрузке оно не обновилось до 10 строк.
На случай, если кому-то интересно, подключен ли я к delegate и источнику данных.

снимок экрана

Комментарии:

1. Может быть так много всего. Вы подключили свойства делегата tableview и источника данных?

2. Да, они прикреплены к files owner, и я установил для представления xib значение UITableView.

3. Вы установили количество разделов в tableview равным 1 в методе делегирования?

4. Я этого не делал, но я только что сделал со следующим: -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; }

5. Действительно ли таблица возвращает какую-либо ячейку (видны ли возвращаемые ячейки в таблице) или вы просто видите пустую таблицу? Если ячейки возвращаются, вы пытались изменить цвет шрифта текстовой метки?

Ответ №1:

Убедитесь, что если вы используете XIB, то ваши соединения установлены и что они указывают на UITableView .

Кроме того, когда вы используете UITableViewController, нет необходимости использовать <..Delegate,..Datasource> протоколы.

Комментарии:

1. Сделано, сделано и еще раз сделано. Я думаю, это связано с правкой, которую я внес. Если я возвращаю число, а не переменную, которая является int с сохраненным в ней числом, это работает. К сожалению, я, конечно, должен сделать это переменной.

2. Хорошо, я подобрался ближе и опубликовал еще одно обновление на случай, если это поможет. Перезагрузка, похоже, работает не так, как было объявлено.

3. На самом деле вам даже не нужен XIB, если вы не добавляете никаких дополнительных выходов, поэтому вы могли бы просто удалить XIB, чтобы уменьшить путаницу.

4. Решено! В предыдущем XIB у меня было указано неправильное имя для имени XIB. Я не уверен, почему это не приводило к ошибке и, казалось, влияло только на это.