cocoa programming for Mac OS X tableView ich verzweifle!

S

Schulz89

Mitglied
Thread Starter
Dabei seit
14.07.2011
Beiträge
30
Reaktionspunkte
0
Hi,
ich bin gerade dabei bisschen in Thema Programmieren einzusteigen.
Nun habe ich mit dieses Buch gekauft und wollte anfangen, doch leider komme ich an einem Punkt nicht weiter das Beispiel-Programm möchte einfach nicht so wie es soll.
Ich wollte ein tableView erstellen, wo die möglichen verschiedenen Stimmen des NSSpeechSynthesizer drin sind, ich habe alles so abgeschrieben wie es im Buch steht, aber ich sehe leider keine Stimmen im tableView hier ist der Code (das Programm startet, aber das tableVIew ist leer)

Ein Fehler zeigt er an habe ich als Kommentar unten dazugeschrieben an der stelle mit "self"...


#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>{
NSArray *_voices;
NSSpeechSynthesizer *_speechSynth;
}

@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTextField *textField;
@property (weak) IBOutlet NSTableView *tableView;



-(IBAction)start:(id)sender;
-(IBAction)stop:(id)sender;


@end



#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize textField = textField;
@synthesize tableView = tableView;







- (id)init
{

self = [super init];
if (self) {
NSLog(@"init");
_speechSynth = [[NSSpeechSynthesizer alloc] initWithVoice:nil]; // der Fehler!!! Sending AppDelegate *_strong to parameter of incompatible type id<NSSpeechSynthesizerDelegate>

[_speechSynth setDelegate:self];
_voices = [NSSpeechSynthesizer availableVoices];

}

return self;

}


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}


- (IBAction)start:(id)sender{

NSString *string = [textField stringValue];

if ([string length] == 0) {

NSLog(@"string from %@ is of zero-length", textField);
return;
}

[_speechSynth startSpeakingString:string];
NSLog(@"Have started to say: %@", string);

}

- (IBAction)stop:(id)sender{


NSLog(@"stopping"),
[_speechSynth stopSpeaking];


}


- (NSInteger)numbersOfRows:(NSTableView *)tv
{

return (NSInteger)[_voices count];




}

- (id)tableView:(NSTableView *)tv
objectValueForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row
{
NSString *v = [_voices objectAtIndex:row];

return v;
}

- (void)tableView:(NSNotification *)notification{
NSInteger row = [tableView selectedRow];
if (row == 1) {
return;
}

NSString *selectedVoice = [_voices objectAtIndex:row];
[_speechSynth setVoice:selectedVoice];
NSLog(@" new voieces %@", selectedVoice);
}






@end


Zu dem habe ich in der .xib im tableView ein Rechtsklick gemacht und DataSource und Delegate zu der App Delegate gezogen.

Ich hoffe ihr könnt mir helfen!

Danke.

mfg Christian
 
unter referencing outlet hast du den tableview auch verbunden?
 
Ja, meine schon.
Ich bin in die .h Datei gegangen und von da aus vom NStableView ins .xib auf tableView
 
guck nach, rechts klick auf den tableview und unter referencing outlet...
 
Steht tableView zu App. Delegate
Darunter New Referencing outlet nichts...
 
Könnte mir denn vill. Einer einen beispiel von nem TableView schicken... Weil das Programm läuft immer noch nicht... Und google hilft mir auch nicht weiter...
 
Die Warnung kannst Du theoretisch ignorieren, bekommst Du aber weg, indem Du angibst, dass Du das NSSpeechSynthesizerDelegate Protocol implementierst.

Dein Problem sollte eigentlich gelöst sein, wenn Du den Methodennamen numbersOfRows in numberOfRowsInTableView änderst.

Wegen der Verbindungen beim App-Delegate-Objekt:


Ach so...der Table View Delegate fehlt noch bei dem Screenshot. Und Deine tableView-Methode müsste eher tableViewSelectionDidChange oder so heißen...
 
Zuletzt bearbeitet:
bei mir steht leider ein ? bei dem Screenshot und es klappt leider immer noch nicht:(
 
ERFOLG! Danke! Es war wohl numberOfRowsInTableView und ich hatte die dataSource falsch zugeordnet! :)
 
Zurück
Oben Unten