Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa NSApp可可纸问题_Cocoa - Fatal编程技术网

Cocoa NSApp可可纸问题

Cocoa NSApp可可纸问题,cocoa,Cocoa,这就是我要做的。我需要提示用户输入密码提示,在用户输入密码并点击(比如)工作表上的Enter按钮之前,我希望防止在后台解析代码。 下面是运行工作表的代码,当用户输入密码并点击Enter键时,endSpeedSheet将运行。我从Main()函数调用所有这些函数 我注意到的是,当主函数运行时,工作表显示出来,提示用户输入密码。但在后台,我已经看到“代码到达这里”已经运行。这意味着代码已经在后台运行。我需要的是代码在密码提示下等待,然后在工作表被删除后使用此密码。你知道我在这里遗漏了什么吗?(提前感

这就是我要做的。我需要提示用户输入密码提示,在用户输入密码并点击(比如)工作表上的Enter按钮之前,我希望防止在后台解析代码。 下面是运行工作表的代码,当用户输入密码并点击Enter键时,endSpeedSheet将运行。我从Main()函数调用所有这些函数

我注意到的是,当主函数运行时,工作表显示出来,提示用户输入密码。但在后台,我已经看到“代码到达这里”已经运行。这意味着代码已经在后台运行。我需要的是代码在密码提示下等待,然后在工作表被删除后使用此密码。你知道我在这里遗漏了什么吗?(提前感谢:)


答案很简单:在调用
-showSpeedSheet:
后,不要直接输入工作表完成后需要运行的代码。工作表是异步的,因此您必须考虑代码,以便只在工作表完成后调用它

- (IBAction) showSpeedSheet:(id)sender
{
    [NSApp beginSheet:speedSheet
       modalForWindow:self.window
        modalDelegate:self
       didEndSelector:@selector(speedSheetDidEnd:returnCode:contextInfo:)
          contextInfo:nil];
}


- (IBAction)endSpeedSheet:(id)sender
{
    self.joinPassword = [joinPasswordLabel stringValue];
    [NSApp endSheet:speedSheet];
    [speedSheet orderOut:sender];
}

- (void)speedSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
{
    if(sheet == speedSheet)
    {
        //the sheet has ended, so do something
    }
}
这就是
-beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:
方法中的
didEndSelector
参数的作用。您传入一个选择器,该选择器将在图纸关闭时调用。在模态委托对象中,实现此选择器,并在工作表完成后执行需要执行的任何处理

- (IBAction) showSpeedSheet:(id)sender
{
    [NSApp beginSheet:speedSheet
       modalForWindow:self.window
        modalDelegate:self
       didEndSelector:@selector(speedSheetDidEnd:returnCode:contextInfo:)
          contextInfo:nil];
}


- (IBAction)endSpeedSheet:(id)sender
{
    self.joinPassword = [joinPasswordLabel stringValue];
    [NSApp endSheet:speedSheet];
    [speedSheet orderOut:sender];
}

- (void)speedSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
{
    if(sheet == speedSheet)
    {
        //the sheet has ended, so do something
    }
}

谢谢你,罗布。这帮了大忙。我现在让它工作了。如果有人偶然发现了这个链接,也可以查看一下。我觉得这很有帮助: