IOS super 关键字导致错误

发布于 2024-12-11 03:15:14 字数 1077 浏览 2 评论 0原文

我正在更新一个不是我编写的应用程序中的代码,同时基本上自学 Objective C,所以我是这个东西的初学者。

我有一个名为 TableViewController 的类,其中有一个方法,一旦 JSON feed 成功获取一些数据就会触发该方法。该方法被称为:

- (void)JSONFetch:(MYJSONFetch *)fetch didDownloadCollection:(id)collection 
{
    //CODE HERE
}

我有一堆从该类继承的其他类,它们依次调用该方法自己的版本,并将自己的功能添加到组合中。 例如,我有一个名为 CategoryViewController 的类,其中定义了此方法:

- (void)JSONFetch:(MYJSONFetch *)fetch didDownloadCollection:(id)collection 
{
    [super didDownloadCollection:collection];
}

注意那里的 SUPER 调用,理想情况下它应该能够访问父方法中的所有代码及其自己的代码。

在类别控制器上的 .h 文件中,我有这个:

#import "MYTableViewController.h"

@interface MYCategoryViewController : MYTableViewController 
{ 
    //code here
}

所以它应该能够“看到”其他代码,但我在 SUPER 行上收到此错误:

Instance method '-didDownloadCollection' not found (return type defaults to 'id')

这大概意味着它实际上看不到父方法。据我所知,它没有设置为私有,.h 明确提到了继承,其他方法调用愉快地在两者之间来回反弹。

所以,我所做的一些事情破坏了这一切,但我不知道是什么。我隐约知道它一定在 MYJSONFetch 代码中,但我不确定。

任何人都对此有任何了解,花了几个小时试图弄清楚为什么它看不到父方法。

I'm updating the code in an app I didn't write while at the same time basically teaching myself objective C so am a beginner with this stuff.

I have a class called TableViewController and in it I have a method that is fired once a JSON feed successfully gets some data. This method is called:

- (void)JSONFetch:(MYJSONFetch *)fetch didDownloadCollection:(id)collection 
{
    //CODE HERE
}

I have a bunch of other classes that inherit from this class and in turn they call their own version of this method and add their own bits of functionality to the mix.
So for example I have a class called CategoryViewController that has this method defined in it:

- (void)JSONFetch:(MYJSONFetch *)fetch didDownloadCollection:(id)collection 
{
    [super didDownloadCollection:collection];
}

Notice the SUPER call there, ideally it should be able to access all the code in the parent's method and its own code as well.

In the .h file on the category controller I have this:

#import "MYTableViewController.h"

@interface MYCategoryViewController : MYTableViewController 
{ 
    //code here
}

So it should be able to 'see' the other code, but I get this error on the SUPER line:

Instance method '-didDownloadCollection' not found (return type defaults to 'id')

Which presumably means it actually can't see the parent method. It's not set as private as far as I can tell, the .h explicitly mentions the inheritance and other method calls happily bounce back and forth between the two.

So, something I've done has borken this good and I've no idea what. I've an inkling it must be in the MYJSONFetch code, but am not sure.

Anyone shed any light on this, hours spent trying to figure out why it can't see the parent method.

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

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

发布评论

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

评论(2

找个人就嫁了吧 2024-12-18 03:15:14

该方法是

- (void)JSONFetch:(MYJSONFetch *)fetch didDownloadCollection:(id)collection

所以你必须调用

[super JSONFetch:fetch didDownloadCollection:collection];

The method is

- (void)JSONFetch:(MYJSONFetch *)fetch didDownloadCollection:(id)collection

So you have to call

[super JSONFetch:fetch didDownloadCollection:collection];
泡沫很甜 2024-12-18 03:15:14

那是因为该方法看起来像 JSONFetch:didDownloadCollection: 而不是 didDownloadCollection:

Thats because the method is looks like this JSONFetch:didDownloadCollection: instead of this didDownloadCollection:.

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