NSTAbleView не отображает содержимое NSMutableArray - PullRequest
0 голосов
/ 15 сентября 2011

В Xcode 4 я создал новое приложение Cocoa под названием Tabletest, на xib я добавил NSTableView и перетянул его в delegate object приложения (создаваемый автоматически при создании нового приложения Cocoa).Я установил источник данных таблицы и делегировал объект делегата приложения с именем Tabletest App Delegate.

Вкл. tabletestAppDelegate.h и tabletestAppDelegate.m Я добавил (очевидно) требуемый

- (int)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row;

- (int)numberOfRowsInTableView:(NSTableView *)tableView
{
    return (int)[myArray count];
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
{
    return [myArray objectAtIndex:row];
}

и объявилNSMutableArray like NSMutableArray * myArray;
Затем я перетащил таблицу в .h и создал свойство вроде:

@property (assign) IBOutlet NSTableView *myTable;

В файле .m я добавил реализацию numberOfRowsInTableView и (id)tableView...

и добавлено:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    myArray = [[NSMutableArray alloc] initWithCapacity:10];
    int i = 0;
    for(i=0; i<10;i++) 
    {
        [myArray insertObject: [NSString stringWithFormat:@"This is string %d!",i+1] atIndex:i];
    }

    NSEnumerator * enumerator = [myArray objectEnumerator];
    id element;

    while((element = [enumerator nextObject]))
    {
        // Do your thing with the object.
        NSLog(@"%@", element);
    }

}

NSLog показывает, что массив заполняется, но информация никогда не отображается в таблице.Что мне не хватает?Я новичок в какао и понятия не имею, почему добавить информацию в простую таблицу так сложно.

Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2011

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

0 голосов
/ 15 октября 2016

Есть еще один аспект, который не отображает содержимое: Если вы добавляете новый элемент в ваш массив программно, то есть динамически, в любое время в вашем приложении (не на этапе «инициализации» в applicationDidFinishLaunching).

В этом случае создайте IBOutlet для вашего контроллера массива и вызовите restrangeObjects

 //  ... adding items to myArray
 [myArray insertObject: yadayada ...];

 // then let the controller rearrange the objects
 [arrayCtrl rearrangeObjects];  

Это ведет себя как "обновление" представления таблицы новым элементом.

0 голосов
/ 15 сентября 2011

Я отвечу на свой вопрос, добавлю

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