繁体   English   中英

'UIViewController'没有可见的@interface声明选择器

[英]No visible @interface for 'UIViewController' declares the selector

对我来说,这是目标C的第一天,请耐心等待。

我试图允许self (引用我的LoginViewContoller类)供我的委托方法connectionDidFinishLoading访问,其中我将响应传递给我的LoginViewController.m文件中的returnResponseFromPost方法。

当前,在我的HTTPUtility.m文件中,我有一个自定义初始化程序。 我的目标是将LoginViewController的self (我传递给HTTPUtility的initWithViewController方法)分配给我的属性self.viewController,以便可以对returnResponseFromPost进行适当的方法调用。 但是,我收到一个错误,并且不确定为什么:

No visible @interface for 'UIViewController' declares the selector 'returnHtmlFromPost:'

我理解此消息的意思,但是在更深层次上,我对于为什么将viewController被识别为UIViewController而不是我预期为LoginViewController感到困惑。

这是相关的代码...

在我的LoginViewController.h文件中:

@interface LoginViewController : UIViewController;
...
- (void) returnResponseFromPost:(NSString *)responseString;

在我的LoginViewController.m文件中:

HTTPUtility *httputil = [[HTTPUtility alloc] initWithViewController:self];

在我的HTTPUtility.h文件中:

@class UIViewController;

@interface HTTPUtility : NSObject {
    NSMutableData* responseData;
    UIViewController* viewController;
}

@property (strong, nonatomic) UIViewController* viewController;
@property (strong, nonatomic) NSMutableData *responseData;

- (id) initWithViewController:(UIViewController *)vwController;

在我的HTTPUtility.m文件中:

- (id) init {
    return [self initWithViewController:nil];
}

- (id) initWithViewController:(UIViewController *)vwController {
    self = [super init];
    if (self) {
        responseData = [[NSMutableData alloc] init];
        self.viewController = vwController;
    }
    return self;
}  

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
     NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

     // Here is where the error is thrown...
     [viewController returnResponseFromPost:responseString];
}

最初,我认为这只是一个被遗忘的import语句,但是我对此进行了尝试,但没有成功。 我非常感谢您提供的帮助,这样我就可以了解我要去哪里了! 谢谢。

声明时,您键入viewController作为UIViewController。 您需要将其键入为LoginViewController。 您也不应该同时声明一个ivar和一个属性。 只需声明属性,然后删除两个ivars。

您可以在协议中声明该方法:

@protocol HTTPUtilityDelegate <NSObject>

- (void) returnResponseFromPost:(NSString *)responseString;

@end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM