-1
我一直在通過在這裏推薦的一本書中的練習在stackoverflow,但是我遇到了一個問題,並在三天的撞擊我的頭在牆上,我想我需要一些幫助。通過「可可編程爲Mac OS X」中的練習 - 我被難倒了
我正在通過「Speakline」練習,我們將TableView添加到界面,並且該表格將顯示可以爲程序的文本到語音方面選擇的「語音」。
我有兩個問題,我似乎無法到達的底部:
- 我得到以下錯誤:***非法NSTableView的數據源()。必須實現numberOfRowsInTableView:和的tableView:objectValueForTableColumn:行:
- 的的tableView是應該顯示的聲音出現空白
我有兩個問題是相關的感覺。
我包括我的界面代碼在這裏:這裏
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject <NSSpeechSynthesizerDelegate, NSTableViewDelegate>
{
IBOutlet NSTextField *textField;
NSSpeechSynthesizer *speechSynth;
IBOutlet NSButton *stopButton;
IBOutlet NSButton *startButton;
IBOutlet NSTableView *tableView;
NSArray *voiceList;
}
- (IBAction)sayIt:(id)sender;
- (IBAction)stopIt:(id)sender;
@end
我的實現代碼:
#import "AppController.h"
@implementation AppController
- (id)init
{
[super init];
//Log to help me understand what is happening
NSLog(@"init");
speechSynth = [[NSSpeechSynthesizer alloc] initWithVoice:nil];
[speechSynth setDelegate:self];
voiceList = [[NSSpeechSynthesizer availableVoices] retain];
return self;
}
- (IBAction)sayIt:(id)sender
{
NSString *string = [[textField stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//Is the string zero-length?
if([string length] == 0) {
NSLog(@"String from %@ is a string with a length of %d.", textField, [string length]);
[speechSynth startSpeakingString:@"Please enter a phrase first."];
}
[speechSynth startSpeakingString:string];
NSLog(@"Started to say: %@", string);
[stopButton setEnabled:YES];
[startButton setEnabled:NO];
}
- (IBAction)stopIt:(id)sender
{
NSLog(@"Stopping...");
[speechSynth stopSpeaking];
}
- (void) speechSynthesizer:(NSSpeechSynthesizer *)sender didFinishSpeaking:(BOOL)complete
{
NSLog(@"Complete = %d", complete);
[stopButton setEnabled:NO];
[startButton setEnabled:YES];
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [voiceList count];
}
- (id)tableView: (NSTableView *)tv objecValueForTableColumn: (NSTableColumn *)tableColumn
row:(NSInteger)row
{
NSString *v = [voiceList objectAtIndex:row];
NSLog(@"v = %@",v);
NSDictionary *dict = [NSSpeechSynthesizer attributesForVoice:v];
return [dict objectForKey:NSVoiceName];
}
/*
- (BOOL)respondsToSelector:(SEL)aSelector
{
NSString *methodName = NSStringFromSelector(aSelector);
NSLog(@"respondsToSelector: %@", methodName);
return [super respondsToSelector:aSelector];
}
*/
@end
希望你們能看到的東西很明顯,我已經錯過了。
謝謝!