- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Storyboard 在 Xcode 中创建了一个 Mac OS X 应用程序。由于某种原因,AppDelegate 中的 applicationDidFinishLaunching 方法在 NSViewController 中的 viewDidLoad 之后被调用。与 iOS 应用程序一样,我认为 viewDidLoad
应该在 applicationDidFinishLaunching
之前调用? OS X 应用程序中的 Storyboard 会在应用程序完成启动之前初始化 View Controller 吗?
我正在使用 applicationDidFinishLaunching
方法将默认设置注册到 NSUserDefaults 中。不幸的是,注册默认值是在 Storyboard中的 View 加载之后发生的。因此,当我使用 viewDidLoad 在每个 View Controller 中设置 View 时,NSUserDefaults 中的默认数据尚未设置。如果我无法使用 applicationDidFinishLaunching
在 OS X Storyboard 应用中注册 NSUserDefaults,那么如何在调用 viewDidLoad
之前设置默认值?
为了解决此问题,在 Xcode 的 Main.storyboard
中,我关闭了主窗口的“Is Initial Controller”。我将 Storyboard ID 分配给主窗口作为“MainWindow”。然后在 AppDelegate 中输入以下代码:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification) {
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let mainWindow = storyboard.instantiateControllerWithIdentifier("MainWindow") as! NSWindowController
mainWindow.showWindow(nil)
mainWindow.window?.makeKeyAndOrderFront(nil)
}
}
应用程序不会崩溃,但现在窗口永远不会出现。下图显示了我正在使用的 Storyboard:
最佳答案
正确,OS X 中的生命周期略有不同。
不要让 Storyboard成为您的初始界面(这是在项目的常规设置中定义的),您可以设置一个 MainMenu xib 文件并将其指定为您的主界面,然后在 AppDelegate 的 applicationDidFinishLaunching 方法中完成其他初始化代码后,您可以通过编程方式实例化 Storyboard。
如果您还没有阅读过OS X 的 Cocoa 编程:The Big Nerd Ranch Guide,我建议您查看一下;他们在书中做的一件好事实际上是让你摆脱一些默认的 Xcode 模板内容,而是让你通过明确地以“正确”的方式设置你的初始 View Controller 。
您可以在 applicationDidFinishLaunching 中添加类似的内容:
NSStoryboard *mainStoryboard = [NSStoryboard storyboardWithName:@"Main" bundle:nil];
MyWindowController *initialController = (MyWindowController *)[mainStoryboard instantiateControllerWithIdentifier:@"myWindowController"];
[initialController showWindow:self];
[initialController.window makeKeyAndOrderFront:self];
这假设您已经将“主界面”更改为类似 MainMenu.xib 的内容。
关于xcode - OS X Storyboard 在 applicationDidFinishLaunching 之前调用 viewDidLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36681587/
在我的appdelegate.m中,未调用applicationDidFinishLaunching。我读到这是由于我的“应用程序”的委托(delegate)未正确连接,但我不知道如何连接它。我所做的
我的文档说: Add the codes below into the applicationDidFinishLaunching function... -(void)applicationDidF
我为使用 Google Toolkit for Mac 构建的 iPhone 项目设置了单元测试OCUnit 之上的框架。我有一个名为“单元测试”的依赖项目,它根据需要构建并运行测试。 但后来一切都停
只是一个简单的问题。我有一个在我的 applicationDidFinishLaunching 方法中生成的 NSArray,但由于某种原因该数组没有被其他方法使用,并且它说它未被使用。 -(void
我有一个应用程序,其中的 main.m 返回 NSApplicationMain(argc, (const char **) argv);。 我想在 -applicationDidFinishLaun
所以我开始使用 cocoa 和 ObjC。我正在尝试按照 oreilly 的 up and running objective C/cocoa 书中的示例进行操作。我的 applicationDidF
我想在我的应用程序打开时启动调试日志窗口。以下是我计划执行此操作的方式: -(void)applicationDidFinishLaunching:(NSNotification *)notifica
applicationDidFinishLaunching尽管 applicationDidBecomeActive叫做。我只能找到 macOS 解决此问题的方法( here 、 here 和 her
我有一个我自己无法解决的问题。在用户可以看到 View(UITableViewController) 之前,我必须从我的 Web 服务器下载数据,所以在 UITableView 应该可见的时候,它应该
我通过 unity 3.4.2 构建我的项目并在 Xcode 4.2 中运行它。执行UnityInitApplication(appPath)函数时游戏退出。我可以正确构建并运行其他项目。我想知道可能
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visi
documentation for applicationDidFinishLaunching(_:)状态... Although not formally deprecated, do not us
我一直在尝试使用 Swift 3,但我无法开始。以下代码正在编译,但它不记录任何内容。看起来 applicationDidFinishLaunching 没有被调用。我是否遗漏了一些关键部分? Sou
我的项目是基于文档的,只有将加载状态菜单的代码放在awakeFromNib下才会执行。 #import "StatusMenuAppDelegate.h" @implementation Status
也许我的方式是错误的,但在我的应用程序中,我有可加载的包,可以将 NSMenuItem 条目添加到主菜单。 我循环遍历所有包并确定要添加哪些菜单项,然后相应地添加它们。 现在的问题是,这样的代码应该放
我正在尝试在应用程序启动时加载窗口的大小和其他属性。不幸的是,如果我这样做 applicationDidFinishLaunching 或 applicationWillFinishLaunching
我在这里为我的 cocoa 应用程序声明了一个委托(delegate): MyAppDelegate.h @interface MyAppDelegate : NSApplication { } -
在 Cooca 应用程序中,MainMenu.xib 是在标准模板中为您设置的。该 Nib 也已通过应用程序委托(delegate)进行了设置。在 info.plist 中,键“Main nib fi
我是越狱调整开发的新手。现在我只想在第一次加载我的 springboard 时获得警告对话框。 调整.mx %hook Springboard -(void)applicationDidFinishL
出于测试目的,我希望能够将应用程序重置为干净状态。 (类似于从模拟器/iPhone 中删除应用程序的操作)。 假设我们有一个 WIPE_DATA 定义,如果设置了该定义,应用程序应该像刚刚安装一样启动
我是一名优秀的程序员,十分优秀!