我正在使用XCode 11学习大呆子牧场的iOS编程书(第4版,主要是Objective C),我遇到了麻烦,如何添加一个UIView。
当我在didFinishLaunchingWithOptions中发送这条信息时
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
我收到一条未识别的选择器消息。
我试过删除启动和主故事板,但没有成功,并启用多个窗口。这是在一个单视图应用程序项目中(也许我应该尝试一个空项目?
我有什么地方遗漏或不理解?我选择这本书是因为我正试图学习Objective-C(不是Swift),而调试器并没有告诉我这里有什么问题。
谢谢。
该教程可以追溯到前期 UIWindowSceneDelegate
天。
Prewindowscene时代(笑话)
你的代码在语法上是正确的,原因在于 AppDelegate
符合协议 UIApplicationDelegate
其中宣称 window
但如果没有在类上声明属性,你会得到异常的结果
*** 由于未捕获异常'NSInvalidArgumentException',原因:'-[AppDelegate setWindow:]: 未识别的选择器发送到实例...'而终止应用程序。
如果你看一下生成的模板项目,你可能会看到以下内容
AppDelegate.h/.m
&amp.是你会发现声明的地方: SceneDelegate.h/.m
SceneDelegate.h
是你会发现声明的地方。
@property (strong, nonatomic) UIWindow * window;
虽然技术上你可以在
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
这没有任何意义,因为 UIWindow
实例是由故事板系统为你创建的。
我的直觉是跳过这块教程,使用提供的故事板系统创建其他元素。UIWindow
从 SceneDelegate
.
另外,如果你有你的心脏设置在原来的教程,你可以选择退出。场景力学 并加上
@property (strong, nonatomic) UIWindow * window;
到 AppDelegate.h