当前位置:  开发笔记 > IOS > 正文

Cocoa NSCollectionView不调用dataSource方法

如何解决《CocoaNSCollectionView不调用dataSource方法》经验,为你挑选了1个好方法。

有一个大脑放屁,无法弄清楚为什么没有调用NSCollectionView的dataSource方法.

我遇到的NSCollectionView的所有样本都在使用绑定.即使是Apple的"编程指南",与其他大多数通常令人惊叹的编程指南相比,都非常简短.

我有一个沙箱测试设置只是为了测试这个.我正在从dribbble.com加载图片.

这是我的AppDelegate.h:

#import 
#import "Dribbble.h"

@interface AppDelegate : NSObject 
@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缺少什么?



1> gngrwzrd..:

我想到了.事实证明,在接口构建器中您必须更改布局,默认情况下它设置为内容阵列(旧版).

在此输入图像描述


这是默认选项?默认选项不调用数据源方法?真的,Apple ???
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有