gpt4 book ai didi

cocoa - NSAlert 开始SheetModalForWindow :completionHandler:

转载 作者:行者123 更新时间:2023-12-03 16:16:36 25 4
gpt4 key购买 nike

在 Xcode 5.0.2 中设置要显示为模式表的 NSAlert 对象时,我遇到了一个有趣的惊喜。

我计划使用 beginSheetModalForWindow:modalDelegate:didEndSelector:contextInfo:

当我开始输入它时,Xcode 会为我自动填充 beginSheetModalForWindow:completionHandler: (尽管我在任何 NSAlert 文档中找不到它)。

我更喜欢使用完成处理程序而不是委托(delegate)/选择器作为回调机制,所以我继续尝试。我惊喜地发现它运行得非常好。

在我做出 promise 之前先问三个简单的问题。

  1. 我在文档中遗漏了什么吗?

  2. 如果此功能未记录,使用该功能是否“安全”? (即它会像它出现时一样神秘地消失吗?)

  3. 我不想根据我通过日志记录看到的内容对响应值进行硬编码。有人知道“正确的”NS...Button 常量吗?

最佳答案

这个调用是“安全的”,但只有 10.9+。这是来自头文件的内容:

#if NS_BLOCKS_AVAILABLE
- (void)beginSheetModalForWindow:(NSWindow *)sheetWindow completionHandler:(void (^)(NSModalResponse returnCode))handler NS_AVAILABLE_MAC(10_9);
#endif

看来他们只是不小心将其排除在当前文档之外。不过,标题通常被认为是 Cocoa 中的“真相”——它们权威地告诉您哪些内容已弃用,哪些内容是新增的。 (例如,与 X11 不同,在 X11 中,文档被声明在实际实现或 header 中是正确的。)

这些是您要在completionHandler block 中使用的常量:

/* These are additional NSModalResponse values used by NSAlert's -runModal and -beginSheetModalForWindow:completionHandler:.

By default, NSAlert return values are position dependent, with this mapping:
first (rightmost) button = NSAlertFirstButtonReturn
second button = NSAlertSecondButtonReturn
third button = NSAlertThirdButtonReturn
buttonPosition 3+x = NSAlertThirdButtonReturn + x

Note that these return values do not apply to an NSAlert created via +alertWithMessageText:defaultButton:alternateButton:otherButton:informativeTextWithFormat:, which instead uses the same return values as NSRunAlertPanel. See NSAlertDefaultReturn, etc. in NSPanel.h
*/
enum {
NSAlertFirstButtonReturn = 1000,
NSAlertSecondButtonReturn = 1001,
NSAlertThirdButtonReturn = 1002
};

关于cocoa - NSAlert 开始SheetModalForWindow :completionHandler:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21058670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com