簡體   English   中英

將UIViewController上的類別轉換為自定義子類

[英]Converting a category on UIViewController into a custom subclass

我有一個類類別,它向UIViewController添加了一些方法。 我需要將一些實例變量添加到類別中,因此我將其變成了自定義UIViewController子類,並添加了實例變量。 然后,我將顯示的UIViewController轉換為新子類的實例。

現在,我在加載應用程序時無法加載新的UIViewController 我從AppDelegate的筆尖加載視圖控制器:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[ATFIPresentationViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
    } else {
        self.viewController = [[ATFIPresentationViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible]; //Crashes Here
    return YES;
}

這樣做之后,當我在應用程序的窗口中調用makeKeyAndVisible時,將引發異常:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason:
'[<ATFIPresentationViewController 0x6c497d0> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key basicPicker.'

其中basicPicker是UITextFieldIBOutlet 我在IBOutlet定義的每個IBOutlet都會發生這種情況。 為什么要使viewController成為UIViewController的子類的子類,以防止從筆尖加載任何內容? 筆尖中的“文件所有者”是ViewController,而不是ATFIPresentationViewController

編輯:好吧,我已經厭倦了嘗試使它以“正確的”方式工作並且減少了繁瑣的打字方式。 我通過將擴展變成NSObject並將UIViewController傳遞給它來使其工作。 如果有人想看一下,我在gitHub上發布了我正在使用的工具

發生該錯誤的原因是,您的筆尖試圖將值設置為不具有名稱basicPicker的屬性的類的實例。 這有力地表明您正在將消息發送到錯誤的對象類型。

您需要在nib文件中將File's Owner的類設置為您創建的新UIViewController子類,而不僅僅是默認的UIViewController。 在筆尖中選擇“ File's Owner ,然后可以在右面板頂部的“實用程序”第三個選項卡中以Xcode命名為Identity Inspector對其進行更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM