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
Objective-C/Cocoa/XCode新手:如何接收通知?_Objective C_Cocoa - Fatal编程技术网

Objective-C/Cocoa/XCode新手:如何接收通知?

Objective-C/Cocoa/XCode新手:如何接收通知?,objective-c,cocoa,Objective C,Cocoa,我无法从cocoa编程书中找到一个例子(我认为部分问题是XCode已经过时)。除了在IB中建立适当的连接外,它没有提到我从NSTableView接收通知所必须做的任何特殊工作。该应用程序是一个带有NSTextField的程序,用于用户输入,当单击按钮时,NSSpeechSynthesizer的实例将说出输入的行。我应该能够通过在表格视图中选择一行来切换说话的声音。我可以单击,该应用在技术上可以运行,但我无法通过单击GUI上NSTableView上的一行来更改默认语音: appdelegate.

我无法从cocoa编程书中找到一个例子(我认为部分问题是XCode已经过时)。除了在IB中建立适当的连接外,它没有提到我从NSTableView接收通知所必须做的任何特殊工作。该应用程序是一个带有NSTextField的程序,用于用户输入,当单击按钮时,NSSpeechSynthesizer的实例将说出输入的行。我应该能够通过在表格视图中选择一行来切换说话的声音。我可以单击,该应用在技术上可以运行,但我无法通过单击GUI上NSTableView上的一行来更改默认语音:

appdelegate.h:

#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中的应用程序委托作为其
    textField
    链接到文本字段

    (还有其他的可能性(必须在nib中连接东西),但我不会列出所有的可能性…)

  • 如果您的目标确实是将选择消息作为通知获取,那么这一行是错误的:

    [[NSNotificationCenter defaultCenter] 
      addObserver:self selector:@selector(tableViewSelectionDidChange:) 
      name:@"MyNotification" object:table];
    
    此通知的名称不是
    @“MyNotification”
    ;它是
    NSTableViewSelectionDidChangeNotification


    • 这里有几个可能的错误来源

      • 您可能忘记了将nib中的表视图作为其
        委托
        挂接到应用程序委托

      • 您可能忘了将nib中的应用程序委托作为其
        textField
        链接到文本字段

        (还有其他的可能性(必须在nib中连接东西),但我不会列出所有的可能性…)

      • 如果您的目标确实是将选择消息作为通知获取,那么这一行是错误的:

        [[NSNotificationCenter defaultCenter] 
          addObserver:self selector:@selector(tableViewSelectionDidChange:) 
          name:@"MyNotification" object:table];
        
        此通知的名称不是
        @“MyNotification”
        ;它是
        NSTableViewSelectionDidChangeNotification


      什么不起作用?在我看来,它工作得很好。您正在选择Alex,文本字段显示
      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,因为即使我点击了那一行,声音也没有改变。文本字段告诉我正在使用哪种声音,而不是选择。在这种情况下,您的屏幕截图不是很好的屏幕截图!是的,但是第一个是最有可能的。不需要将此消息作为通知获取,因为您可以将其作为代理消息获取。小心别让你最后得到两次!是的,但是第一个是最有可能的。不需要将此消息作为通知获取,因为您可以将其作为代理消息获取。小心别让你最后得到两次!