gpt4 book ai didi

macos - Cocoa NSCollectionView 不调用 dataSource 方法

转载 作者:行者123 更新时间:2023-12-03 16:05:01 25 4
gpt4 key购买 nike

脑子有问题,无法弄清楚为什么 NSCollectionView 的 dataSource 方法没有被调用。

我遇到的 NSCollectionView 的所有示例都使用绑定(bind)。与大多数其他通常令人惊叹的编程指南相比,即使是苹果公司的“编程指南”也极其简短和模糊。

我有一个沙箱测试设置只是为了测试这个。我正在从 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 缺少什么?

最佳答案

我明白了。事实证明,在界面生成器中,您必须更改布局,默认情况下它设置为内容数组(旧版)。

enter image description here

关于macos - Cocoa NSCollectionView 不调用 dataSource 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34447718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com