'UIViewController' 没有可见的@interface 声明选择器
No visible @interface for 'UIViewController' declares the selector
这是我 Objective C 的第 1 天,所以请多多包涵。
我正在尝试允许我的委托方法 connectionDidFinishLoading
访问 self
(引用我的 LoginViewContoller class),其中我获取响应并将其传递给我的 returnResponseFromPost
方法在我的 LoginViewController.m 文件中。
目前,在我的 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];
}
起初我认为这是一个忘记导入语句的问题,但我对此进行了试验但无济于事。我真的很感激这方面的帮助,这样我就能明白我哪里出错了!谢谢。
您在声明时将 viewController 键入为 UIViewController。您需要将其键入为 LoginViewController。您也不应该同时声明 ivar 和 属性。只需声明 属性,然后删除两个 ivars。
您可以在协议中声明该方法:
@protocol HTTPUtilityDelegate <NSObject>
- (void) returnResponseFromPost:(NSString *)responseString;
@end
这是我 Objective C 的第 1 天,所以请多多包涵。
我正在尝试允许我的委托方法 connectionDidFinishLoading
访问 self
(引用我的 LoginViewContoller class),其中我获取响应并将其传递给我的 returnResponseFromPost
方法在我的 LoginViewController.m 文件中。
目前,在我的 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];
}
起初我认为这是一个忘记导入语句的问题,但我对此进行了试验但无济于事。我真的很感激这方面的帮助,这样我就能明白我哪里出错了!谢谢。
您在声明时将 viewController 键入为 UIViewController。您需要将其键入为 LoginViewController。您也不应该同时声明 ivar 和 属性。只需声明 属性,然后删除两个 ivars。
您可以在协议中声明该方法:
@protocol HTTPUtilityDelegate <NSObject>
- (void) returnResponseFromPost:(NSString *)responseString;
@end