Таблица не заполнена - PullRequest
1 голос
/ 08 июня 2011

Я знаю, что это часто задаваемый вопрос / проблема. Я просмотрел множество вопросов и ответов для своей проблемы, но, думаю, я немного туп, потому что я нигде не видел ответа.

У меня есть файл в массиве, который я хотел бы использовать для заполнения таблицы.

Проблема в том, что он не вызывается. Также не является numberOfRowsInSection или numberOfSectionsInTableView. Я, насколько я вижу, был вызван только viewDidLoad.

У меня 1 раздел, количество элементов в моем массиве равно 3 (в отличие от нуля).

Соответствующий код здесь ...

- (void)viewDidLoad {   
    [super viewDidLoad];
    FileControl *fileArray = [[FileControl alloc] init];
    matArray = [fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]];
    [fileArray release];
    NSLog(@"%i \n %@", [matArray count], matArray); // matArray is filled.
    NSLog(@"ViewDidLoad"); }

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

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

    NSString *text = [matArray objectAtIndex:[indexPath row]];
    [[cell textLabel] setText:text];

    return cell; }

@interface MaterialTableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {

    IBOutlet UITableView *materialTableView;
    NSArray *matArray;

}

@property (nonatomic, retain) NSArray *matArray;

@end

Другие методы являются стандартными.

Полагаю, моя проблема в том, что я недостаточно хорошо понимаю поток.

Любая помощь будет принята с благодарностью. Заранее спасибо.

Ответы [ 5 ]

2 голосов
/ 08 июня 2011

Полагаю, вы используете UITableViewController.

Если вы используете UITableView, это немного сложнее (в этом случае вам нужно реализовать протоколы UITableViewDelegate, UITableViewDataSource). [обновление] Это не ваш случай, вы используете UITableViewController.

Добавьте эту строку в конец вашего viewDidLoad метода:

[self.tableView reloadData];  

Или переместите это:

FileControl *fileArray = [[FileControl alloc] init];
matArray = [fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]];
[fileArray release];

к init методу. Ваш init метод должен выглядеть следующим образом:

- (id)initWithStyle:(UITableViewStyle)style {
    if ((self = [super initWithStyle:style])) {
        FileControl *fileArray = [[FileControl alloc] init];
        matArray = [fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]];
        [fileArray release];
        NSLog(@"%i \n %@", [matArray count], matArray); // matArray is filled.
        NSLog(@"ViewDidLoad");
    }
    return self;
}

Если вы не видите никакого сообщения в журнале, это означает, что вы не используете этот метод для инициализации вашего объекта.

Пожалуйста, покажите весь ваш код в файлах .m и .h.

2 голосов
/ 08 июня 2011

Установили ли вы подкласс UIViewController для delegate и dataSource рассматриваемого UITableView?Без этого ни один из упомянутых вами методов не будет вызван.

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

убедитесь, что вы добавили своего представителя таблицы в ваш файл .h, как показано ниже.

@interface YourViewController : UIViewController <UITableViewDelegate> {

}

Также убедитесь, что вы подключили свой источник данных и делегата в построителе интерфейса.Сделайте это, выполнив:

  1. дважды щелкните файл .xib, чтобы он открылся в конструкторе интерфейсов.
  2. щелкните левой кнопкой мыши на вашем табличном представлении только один раз, чтобы его выделенный синим
  3. щелкните правой кнопкой мыши на вашем табличном представлении, и теперь должно появиться меню.
  4. перетащите источник данных и делегата в файлывладелец коробки.
  5. Обязательно сохраняйте изменения в конструкторе интерфейсов.

Это должно "соединить" все компоненты, необходимые для его работы.

Happy Coding !!

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

Вы использовали

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

return [self.matArray count];
}
0 голосов
/ 08 июня 2011

У меня есть предложение. Просто сделайте снимок для теста. В - (void) viewDidLoad объявить это.

вместо: matArray = [fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]];

Используйте это: matArray = [[NSArray alloc] initWithArray:[fileArray findUniqueItemsInArray:0 :[fileArray setFileToArray]]];

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