[英]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是UITextField
的IBOutlet
。 我在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.