创建 UIView 时,无法识别的选择器在 didFinishLaunchingWithOptions 中发送 self.window 消息
Unrecognized selector sending self.window message in didFinishLaunchingWithOptions when creating a UIView
我正在使用 XCode 11 阅读 Big Nerd Ranch iOS 编程书籍(第 4 版,侧重于 Objective C),我在整理如何添加一个 UIView。
一旦我在 didFinishLaunchingWithOptions 中发送此消息
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
我收到无法识别的选择器消息。
我试过删除启动和主要情节提要但没有成功,并启用多个 windows。这是在单视图应用程序项目中(也许我应该尝试一个空项目?)
我缺少或不理解什么?我选择这本书是因为我正在尝试学习 Objective-C(而不是 Swift),而调试器并没有告诉我这里有什么问题。
谢谢。
该教程可以追溯到 UIWindowSceneDelegate
天之前。
前窗口时代(笑话)
您的代码在语法上正确的原因是 AppDelegate
符合声明 window
的协议 UIApplicationDelegate
但没有 [=48= 上的 属性 声明] 你会得到异常
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AppDelegate setWindow:]:
unrecognized selector sent to instance ...'
如果您查看生成的模板项目,您可能会看到
AppDelegate.h/.m
& SceneDelegate.h/.m
SceneDelegate.h
是您可以找到声明的地方:
@property (strong, nonatomic) UIWindow * window;
虽然从技术上讲您可以在
中添加该行
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
这没有任何意义,因为 UIWindow
实例是由故事板系统为您创建的。
我的直觉是跳过本教程的那一部分,使用 SceneDelegate
中提供的 UIWindow
完成其他元素。
或者,如果您喜欢原始教程,您可以选择退出 并添加行
@property (strong, nonatomic) UIWindow * window;
到AppDelegate.h
我正在使用 XCode 11 阅读 Big Nerd Ranch iOS 编程书籍(第 4 版,侧重于 Objective C),我在整理如何添加一个 UIView。
一旦我在 didFinishLaunchingWithOptions 中发送此消息
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
我收到无法识别的选择器消息。
我试过删除启动和主要情节提要但没有成功,并启用多个 windows。这是在单视图应用程序项目中(也许我应该尝试一个空项目?)
我缺少或不理解什么?我选择这本书是因为我正在尝试学习 Objective-C(而不是 Swift),而调试器并没有告诉我这里有什么问题。
谢谢。
该教程可以追溯到 UIWindowSceneDelegate
天之前。
前窗口时代(笑话)
您的代码在语法上正确的原因是 AppDelegate
符合声明 window
的协议 UIApplicationDelegate
但没有 [=48= 上的 属性 声明] 你会得到异常
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AppDelegate setWindow:]: unrecognized selector sent to instance ...'
如果您查看生成的模板项目,您可能会看到
AppDelegate.h/.m
& SceneDelegate.h/.m
SceneDelegate.h
是您可以找到声明的地方:
@property (strong, nonatomic) UIWindow * window;
虽然从技术上讲您可以在
中添加该行- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
这没有任何意义,因为 UIWindow
实例是由故事板系统为您创建的。
我的直觉是跳过本教程的那一部分,使用 SceneDelegate
中提供的 UIWindow
完成其他元素。
或者,如果您喜欢原始教程,您可以选择退出
@property (strong, nonatomic) UIWindow * window;
到AppDelegate.h