簡體   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