如何更改或扩展 NSCollectionView 的委托?

发布于 2025-01-01 13:08:31 字数 925 浏览 1 评论 0原文

NSCollectionView 有一个委托,它应该符合 NSCollectionViewDelegate

- (id < NSCollectionViewDelegate >)delegate

我有一个新协议,它扩展了 NSCollectionViewDelegate

@protocol extendedProtocol <NSCollectionViewDelegate>

现在,在我的 CollectionViewItem 的控制器类中,我尝试以这种方式调用委托的方法:

if (
    [self collectionView] 
    && [[self collectionView] delegate] && 
    [[[self collectionView] delegate] conformsToProtocol:@protocol(extendedProtocol)]
        ) 
{
BOOL flag = [[[self collectionView] delegate] doSomeWork:@"abc"];
}

我不断收到“找不到实例方法'doSomeWork:'”的警告。

我尝试这样做,

id <extendedProtocol> dg = [[self collectionView] delegate];
BOOL flag = [dg doSomeWork:@"abc"];

但随后我收到警告,“不兼容的指针类型用“id”类型的表达式初始化“id”。

更改 NSCollectionView 委托协议的正确方法是什么?

NSCollectionView has a delegate which should conform to NSCollectionViewDelegate.

- (id < NSCollectionViewDelegate >)delegate

I have a new protocol, which extends NSCollectionViewDelegate.

@protocol extendedProtocol <NSCollectionViewDelegate>

Now, in my CollectionViewItem's controller class, I try to call the delegate's method in this way:

if (
    [self collectionView] 
    && [[self collectionView] delegate] && 
    [[[self collectionView] delegate] conformsToProtocol:@protocol(extendedProtocol)]
        ) 
{
BOOL flag = [[[self collectionView] delegate] doSomeWork:@"abc"];
}

I keep getting warning that "Instance Method 'doSomeWork:' not found".

I tried doing

id <extendedProtocol> dg = [[self collectionView] delegate];
BOOL flag = [dg doSomeWork:@"abc"];

But then I get warning, "Incompatible pointer types initializing 'id' with an expression of type 'id'.

What is the correct way of changing the protocol of NSCollectionView delegate?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌酱 2025-01-08 13:08:31

你需要一个演员阵容。要么像这样:

BOOL flag = [(id <extendedProtocol>) [[self collectionView] delegate] doSomeWork:@"abc"];

或者在你的第二个例子中:

id <extendedProtocol> dg = (id <extendedProtocol>) [[self collectionView] delegate];

You need a cast. Either like this:

BOOL flag = [(id <extendedProtocol>) [[self collectionView] delegate] doSomeWork:@"abc"];

Or in your second example:

id <extendedProtocol> dg = (id <extendedProtocol>) [[self collectionView] delegate];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文