Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 应用程序:启动屏幕后未调用OpenFile_Objective C_Xcode_Macos - Fatal编程技术网

Objective c 应用程序:启动屏幕后未调用OpenFile

Objective c 应用程序:启动屏幕后未调用OpenFile,objective-c,xcode,macos,Objective C,Xcode,Macos,我正在试验macOS xcode objective-C文件处理,或者让我的应用程序打开特定扩展名的文件 到目前为止,我已经使用过(尽管我和iOS使用的是Mac,看起来是同一个过程),而且效果很好。它将文件扩展名与我的应用程序关联,并允许双击文件来启动我的应用程序 现在我想添加文件打开后的处理。我创建了一个名为FileOpen的新对象子类 在my MainMenu.xib中,我创建了一个对象(蓝色立方体),并将该类更改为FileOpen。我将其设置为文件所有者的委托。这是描述的 现在,在File

我正在试验macOS xcode objective-C文件处理,或者让我的应用程序打开特定扩展名的文件

到目前为止,我已经使用过(尽管我和iOS使用的是Mac,看起来是同一个过程),而且效果很好。它将文件扩展名与我的应用程序关联,并允许双击文件来启动我的应用程序

现在我想添加文件打开后的处理。我创建了一个名为FileOpen的新对象子类

在my MainMenu.xib中,我创建了一个对象(蓝色立方体),并将该类更改为FileOpen。我将其设置为文件所有者的委托。这是描述的

现在,在FileOpen.m中,我有这样一个-当文件被打开时,基本上显示一个NSAlert:

- (void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
NSLog(@"Application Finished Launching");
}

-(BOOL)application:(NSApplication*)sharedApplication openFile:(NSString*) fileName
{
[[NSAlert alertWithMessageText:@"Opening File"
defaultButton:@"OK"
alternateButton:nil
otherButton:nil
informativeTextWithFormat:@"Testing file opening handle code."] runModal];
return;
}
这一切似乎都很好。如果我运行我的应用程序,我会得到应用程序启动完成的NSLog。如果我双击一个文件,它会运行应用程序并给出NSAlert

我遇到的问题是,我的应用程序有一个启动屏幕。这将一直显示,直到用户关闭它,然后主应用程序启动。如果我禁用我的启动屏幕,上述所有功能都可以正常工作。如果我启用了启动屏幕,说明application finished launching的NSLog会在启动屏幕之后运行,但是application:openfile永远不会运行(并且没有NSAlert)

我假设我需要添加一些代码,在运行应用程序之前等待applicationWillFinishLaunching
应用程序:打开文件?有没有办法等到应用程序完全初始化后才能正确打开/处理文件?看起来启动屏幕会中断应用程序:openfile

多亏了红色威胁,我才能够让它正常工作。关键是将启动屏幕的处理移动到NSObject子类FileOpen。为此,我只添加了一个通知,在FileOpen类中打开启动屏幕,而不是在最初调用它的位置(主视图)


请注意,应用程序委托方法
applicationWillFinishLaunching
是在初始化应用程序对象之前调用的,而
ApplicationIDFinishLaunching
是在启动和初始化应用程序之后调用的。感谢您的提醒-但这不是真正的问题。我遇到的问题是应用程序:如果我的应用程序先显示一个启动屏幕(一个简单的窗口),openFile不会运行。如果我禁用启动屏幕,那么它确实会运行并显示NSAlert-因此问题更多:我如何等到应用程序完全启动(re:启动屏幕关闭,应用程序将完成启动运行)才能正确打开/处理文件。看起来,启动屏幕会中断应用程序:openfile.Yes。在应用程序有机会完成启动之前,您正在阻止它。您可以尝试在
applicationdFinishLaunching
中显示初始屏幕(给应用程序一个启动的机会),将传递给
application:openFiles
(在
applicationWillFinishLaunching
之后调用)的任何文件隐藏在实例变量中,直到对话框完成。
- (void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
    NSLog(@"applicationWillFinishLaunching");
    [[NSNotificationCenter defaultCenter] postNotificationName:@"WhatsNewOpen" object:self];
}

-(BOOL)application:(NSApplication*)sharedApplication openFile:(NSString*) fileName
{
    
    [[NSAlert alertWithMessageText:@"Opening Files"
    defaultButton:@"OK"
    alternateButton:nil
    otherButton:nil
    informativeTextWithFormat:@"Testing File Open"] runModal];
    return;

}