RunStandardAlert 永远不会返回,按钮无响应

发布于 2024-09-03 06:07:00 字数 599 浏览 5 评论 0原文

我正在尝试在一个非常简单的应用程序中创建一个简单的对话框。它是应用程序中唯一的 UI。但是,当我调用 RunStandardAlert 时,按钮没有响应,并且函数调用永远不会返回。我没有在应用程序的其他任何地方使用 Carbon 或 Cocoa。

这是我正在使用的代码,来自 Carbon 教程。我直接从我的 main() 函数调用它,但我也尝试在使用 InstallEventLoopTimer() 注册事件循环计时器后调用 RunApplicationEventLoop() ,这样我可以从那里调用下面的代码,以防万一发生一些神奇的情况您运行应用程序事件循环来执行对话框工作所需的设置(巫毒!)。

DialogRef theItem;
DialogItemIndex itemIndex;
CreateStandardAlert(kAlertStopAlert, CFSTR("Oh dear, the penguin’s disappeared."),
CFSTR("I hope you weren’t planning to open source him."), NULL, &theItem);
RunStandardAlert (theItem, NULL, &itemIndex);

I'm trying to create a simple dialog box from within a very simple application. It's the only UI in the application. But when I call RunStandardAlert, the buttons are non-responsive, and the function call never returns. I am not using Carbon or Cocoa anywhere else in the app.

This is the code I am using, from the Carbon tutorial. I am calling this directly from my main() function, but I have also tried calling calling RunApplicationEventLoop() after registering an event loop timer with InstallEventLoopTimer() so I could call the below code from there in case there was some magic going on when you run your application event loop that does the setup required for dialog boxes to work (voodoo!).

DialogRef theItem;
DialogItemIndex itemIndex;
CreateStandardAlert(kAlertStopAlert, CFSTR("Oh dear, the penguin’s disappeared."),
CFSTR("I hope you weren’t planning to open source him."), NULL, &theItem);
RunStandardAlert (theItem, NULL, &itemIndex);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十秒萌定你 2024-09-10 06:07:00

如果可执行文件未正确位于应用程序包中,您将无法接收事件。

foo.c

#include <Carbon/Carbon.h>

int main(){
    DialogRef theItem;
    DialogItemIndex itemIndex;
    CreateStandardAlert(kAlertStopAlert, CFSTR("Oh dear, the penguin’s disappeared."),
    CFSTR("I hope you weren’t planning to open source him."), NULL, &theItem);
    RunStandardAlert (theItem, NULL, &itemIndex);
    return 0;
}

然后你编译它

$ gcc foo.c -o foo -framework Carbon

现在你需要创建一个目录

foo.app
foo.app/Contents
foo.app/Contents/MacOS

,然后将二进制文件 foo 放入

foo.app/Contents/MacOS/foo

现在你可以调用

$ open foo.app

$ foo.app/Contents/MacOS/foo

参见 捆绑包编程指南

You can't receive an event if the executable is not in an app bundle correctly.

foo.c

#include <Carbon/Carbon.h>

int main(){
    DialogRef theItem;
    DialogItemIndex itemIndex;
    CreateStandardAlert(kAlertStopAlert, CFSTR("Oh dear, the penguin’s disappeared."),
    CFSTR("I hope you weren’t planning to open source him."), NULL, &theItem);
    RunStandardAlert (theItem, NULL, &itemIndex);
    return 0;
}

Then you compile it by

$ gcc foo.c -o foo -framework Carbon

Now you need to create a directory

foo.app
foo.app/Contents
foo.app/Contents/MacOS

and then put the binary foo in

foo.app/Contents/MacOS/foo

Now you can either call

$ open foo.app

or

$ foo.app/Contents/MacOS/foo

See Bundle Programming Guide.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文