Objective-C/Cocoa/XCode新手:如何接收通知?
我无法从cocoa编程书中找到一个例子(我认为部分问题是XCode已经过时)。除了在IB中建立适当的连接外,它没有提到我从NSTableView接收通知所必须做的任何特殊工作。该应用程序是一个带有NSTextField的程序,用于用户输入,当单击按钮时,NSSpeechSynthesizer的实例将说出输入的行。我应该能够通过在表格视图中选择一行来切换说话的声音。我可以单击,该应用在技术上可以运行,但我无法通过单击GUI上NSTableView上的一行来更改默认语音: appdelegate.h:Objective-C/Cocoa/XCode新手:如何接收通知?,objective-c,cocoa,Objective C,Cocoa,我无法从cocoa编程书中找到一个例子(我认为部分问题是XCode已经过时)。除了在IB中建立适当的连接外,它没有提到我从NSTableView接收通知所必须做的任何特殊工作。该应用程序是一个带有NSTextField的程序,用于用户输入,当单击按钮时,NSSpeechSynthesizer的实例将说出输入的行。我应该能够通过在表格视图中选择一行来切换说话的声音。我可以单击,该应用在技术上可以运行,但我无法通过单击GUI上NSTableView上的一行来更改默认语音: appdelegate.
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate,NSSpeechSynthesizerDelegate,NSTableViewDelegate>
{
NSArray *_voices;
NSSpeechSynthesizer *_speechSynth;
}
@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTextField *textField;
@property (assign) IBOutlet NSTextField *text;
@property (assign) IBOutlet NSButton *_speakButton;
@property (assign) IBOutlet NSButton *_stopButton;
@property (assign) IBOutlet NSTableView *table;
-(IBAction)sayIt:(id)sender;
-(IBAction)stopIt:(id)sender;
@end
我猜我弄错了。我只需要有人给我指出正确的工作方向。这里有几个可能的错误来源
- 您可能忘记了将nib中的表视图作为其
挂接到应用程序委托委托
- 您可能忘了将nib中的应用程序委托作为其
链接到文本字段 (还有其他的可能性(必须在nib中连接东西),但我不会列出所有的可能性…)textField
- 如果您的目标确实是将选择消息作为通知获取,那么这一行是错误的:
此通知的名称不是[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tableViewSelectionDidChange:) name:@"MyNotification" object:table];
;它是@“MyNotification”
NSTableViewSelectionDidChangeNotification
- 您可能忘记了将nib中的表视图作为其
挂接到应用程序委托委托
- 您可能忘了将nib中的应用程序委托作为其
链接到文本字段 (还有其他的可能性(必须在nib中连接东西),但我不会列出所有的可能性…)textField
- 如果您的目标确实是将选择消息作为通知获取,那么这一行是错误的:
此通知的名称不是[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tableViewSelectionDidChange:) name:@"MyNotification" object:table];
;它是@“MyNotification”
NSTableViewSelectionDidChangeNotification
- 这里有几个可能的错误来源
com.apple.speech.synthesis.voice.Alex
。所以它是对你点击的回应。到底是什么问题?哎呀。我的意思是说appdelegate没有通过点击NSTableView来更改默认的语音选择,但很明显,因为屏幕显示确实如此。这个程序似乎运行得很好。它可能没有做你期望它做的事情,但它在做它写下来要做的事情。这是有道理的。所以我想我的问题是,我该如何做我想让它做的事?好的,等等。你认为是因为它说的是废话,亚历克斯,它回应了点击。但是Alex是默认语音,当程序启动时,Alex会在默认情况下突出显示。但当我点击坏消息或Agnes(例如)时,它仍然会说Alex,因为即使我点击了那一行,声音也没有改变。文本字段告诉我正在使用哪种声音,而不是选择。在这种情况下,您的屏幕截图不是很好的屏幕截图!什么不起作用?在我看来,它工作得很好。您正在选择Alex,文本字段显示com.apple.speech.synthesis.voice.Alex
。所以它是对你点击的回应。到底是什么问题?哎呀。我的意思是说appdelegate没有通过点击NSTableView来更改默认的语音选择,但很明显,因为屏幕显示确实如此。这个程序似乎运行得很好。它可能没有做你期望它做的事情,但它在做它写下来要做的事情。这是有道理的。所以我想我的问题是,我该如何做我想让它做的事?好的,等等。你认为是因为它说的是废话,亚历克斯,它回应了点击。但是Alex是默认语音,当程序启动时,Alex会在默认情况下突出显示。但当我点击坏消息或Agnes(例如)时,它仍然会说Alex,因为即使我点击了那一行,声音也没有改变。文本字段告诉我正在使用哪种声音,而不是选择。在这种情况下,您的屏幕截图不是很好的屏幕截图!是的,但是第一个是最有可能的。不需要将此消息作为通知获取,因为您可以将其作为代理消息获取。小心别让你最后得到两次!是的,但是第一个是最有可能的。不需要将此消息作为通知获取,因为您可以将其作为代理消息获取。小心别让你最后得到两次!