2015-12-24 5 views
9

Имея мозговой пердит и не может понять, почему методы dataSource для NSCollectionView не вызываются.Какао NSCollectionView не вызывающие данные Методы источника

Все образцы, с которыми я сталкиваюсь для NSCollectionView, используют привязки. Даже «Руководство по программированию от Apple» чрезвычайно короткое и неопределенное по сравнению с большинством других программных руководств, которые обычно потрясают.

У меня есть тестовая установка для песочницы, чтобы проверить это. Я загружаю изображения с dribbble.com.

Вот мой AppDelegate.h:

#import <Cocoa/Cocoa.h> 
#import "Dribbble.h" 

@interface AppDelegate : NSObject <NSApplicationDelegate,NSCollectionViewDataSource,NSCollectionViewDelegate> 
@property IBOutlet NSCollectionView * collectionView; 
@end 

И AppDelegate.m

#import "AppDelegate.h" 
#import "DribbbleCell.h" 

@interface AppDelegate() 

@property (weak) IBOutlet NSWindow *window; 
@property Dribbble * dribbble; 
@property NSMutableArray * dribbbleShots; 
@property NSInteger page; 
@property NSInteger maxPage; 
@end 

@implementation AppDelegate 

- (void) applicationDidFinishLaunching:(NSNotification *) aNotification { 
    self.page = 0; 
    self.maxPage = 1; 
    self.dribbbleShots = [NSMutableArray array]; 

    self.dribbble = [[Dribbble alloc] init]; 
    self.dribbble.accessToken = @"XXXX"; 
    self.dribbble.clientSecret = @"XXXX"; 
    self.dribbble.clientId = @"XXXX"; 

    NSNib * nib = [[NSNib alloc] initWithNibNamed:@"DribbbleCell" bundle:nil]; 
    [self.collectionView registerNib:nib forItemWithIdentifier:@"DribbbleCell"]; 

    self.collectionView.dataSource = self; 
    self.collectionView.delegate = self; 

    [self loadDribbbleShots]; 
} 

- (void) loadDribbbleShots { 
    self.page++; 

    //this loads 100 shots up to max pages. 
    [self.dribbble listShotsWithParameters:@{@"per_page":@"100",@"page":[NSString stringWithFormat:@"%lu",self.page]} completion:^(DribbbleResponse *response) { 
     [self.dribbbleShots addObjectsFromArray:response.data]; 
     if(self.page < self.maxPage) { 
      [self performSelectorOnMainThread:@selector(loadDribbbleShots) withObject:nil waitUntilDone:FALSE]; 
     } else { 
      [self finishedDribbbleLoad]; 
     } 
    }]; 
} 

- (void) finishedDribbbleLoad { 
    //how do I reload collection view data? 
    [self.collectionView setContent:self.dribbbleShots]; 
    [self.collectionView reloadData]; 
    [self.collectionView setNeedsDisplay:TRUE]; 
} 

//** None of the below methods are being called. 

- (NSInteger) numberOfSectionsInCollectionView:(NSCollectionView *)collectionView { 
    return 1; 
} 

- (NSInteger) collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    return self.dribbbleShots.count; 
} 

- (NSCollectionViewItem *) collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath { 
    DribbbleCell * cell = (DribbbleCell *)[collectionView makeItemWithIdentifier:@"DribbbleCell" forIndexPath:indexPath]; 
    return cell; 
} 

@end 

Все для методов источника данных, сбора за исключением в настоящее время называется.

Я проскользнул и прошел через все и убедился, что нет нильских указателей.

Я проверил и проверил, что IBOutlet не ноль.

Класс DribbbleCell в настоящее время ничего не делает, поскольку я все еще пытаюсь понять, почему эти методы источника данных не вызываются.

Что мне недостает для NSCollectionView?

ответ

20

Я понял. Оказывается, в interfacebuilder вам нужно изменить макет, по умолчанию он установлен в Content Array (legacy).

enter image description here

+1

Спасибо за это, приезжающие в NSCollectionView из UICollectionView совсем недавно я не знал, что такая вещь, как режим массива контента. – Ash

+0

@ Массив содержимого Ash использовался в прошлом для привязки данных –

+4

Как этот параметр по умолчанию? Опция по умолчанию не вызывает методы источника данных? Действительно, Apple ??? –

 Смежные вопросы

  • Нет связанных вопросов^_^