• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Problem mit Xcode

robertmini

Fuji
Registriert
01.10.09
Beiträge
37
Code:
#import "KreisumfangController.h"

@implementation KreisumfangController
- (IBAction)pushStart:(id)sender {
	double radius = [Radius doubleValue];
	double durchmesser = radius * 2;
	double umfang = durchmesser * pi;
	
	[Ergebnis setDoubleValue:umfang];
    
}
@end

Also, ich glaub ihr versteht alle, was ich da versuche zu machen, jedoch kriege ich als Ergebnis immer 0. Auch wenn ich mit 3 statt π rechne....Da ich jedoch erst letzte Woche mit Xcode angefangen habe ist dieser Fehler wahrscheinlich ziemlich banal...aber vielleicht hilft mir ja jemand. :)

Und dann habe ich noch eine Frage: Ich habe im Interface-Builder 3 Fenster, beim Start soll sich jedoch nur eines davon öffnen, die anderen sollen dann über actions aufgerufen werden. Wie geht das?

Danke schonmal
Robert

EDIT: Radius und Ergebnis sind meine outlets
 
Zuletzt bearbeitet:
Ups, ich war vorschnell, Problem 1 hat sich erledigt! Aber wie siehts mit den Fenstern aus?
 
hi,

bei den Fenstern, die nicht von Anfang an zu sehen sein sollen, machst du im Interface Builder einfach das Häkchen 'Visible at Launch' weg.

Dann kannst du sie entweder direkt im InterfaceBuilder mit Buttons zum ein-/ausblenden verbandeln: Verbindung vom Button zum Fenster ziehen und aus dem Menü 'makeKeyAndOrderFront:' zum ein- bzw. 'orderOut:' zum ausblenden wählen.
Oder du kannst das auch im Code machen - du musst die Fenster dazu natürlich auch als IBOutlets anlegen - die Methoden zum Ein- und Ausblenden heissen genauso (z.B.
Code:
[myWindow makeKeyAndOrderFront:nil];
)

Grüße

NSObject
 
Das selbe kann man übrigens auch mit einem WindowsController (oder so ähnlich) machen.
 
danke euch allen:) so einigermaßen funktioniert mein programm jetzt schon. weiß jemand noch zufällig, wie man double zahlen in die zwischenablage kopiert? hab in der documentation nichts gefunden, aber wahrscheinlich such ich wieder am falschen ende ;)
 
Such in der Doku: 'Pasteboard', dann klickst du 'Pasteboard Programming Guide' an... voilà

Ich kann dir schon im Voraus sagen, dass du einen double nicht ins pasteboard bringen wirst. Jedoch sehr wohl ein NSNumber mit double-Inhalt. Diesen Umweg musst du machen, wenn du mit Cocoa und der Zwischenablage arbeiten willst.

Gruss ppocket
 
danke, ich hab das jetzt einfach mit NSString gemacht, in der Zwischenablage wird ja sowieso nicht zwischen Text und Zahlen unterschieden. Oder hat das irgendwelche Nachteile?
 
danke, ich hab das jetzt einfach mit NSString gemacht, in der Zwischenablage wird ja sowieso nicht zwischen Text und Zahlen unterschieden. […]

Das ist leider falsch. Du setzt ja (jetzt auf neue Weise unter 10.6) jedem Pasteboard-Objekt einen bestimmten Typ (String, PDF, Image, Color, …) und darum solltest du auch nur genau entsprechende Objekte darin einfügen. Sonst wirst du in Konflikt mit anderen Applikationen geraten, denn das Pasteboard ist ja global.

consider your choice. Gruss ppocket
 
Ich hab noch kein Snow-Leo...und es klappt. Heißt das, unter Snow-Leo funktioniert es nicht? Was muss ich denn ändern?

Code:
	NSString* ergebnis = [Ergebnis stringValue];
	NSPasteboard *pboard = [NSPasteboard generalPasteboard];
	[pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
	[pboard setString:ergebnis forType:NSStringPboardType];
 
Du musst nichts ändern. Es gibt sozusagen nur unter SL eine neue, übersichtlichere Möglichkeit, das Pasteboard zu benutzen. Das alte System wird aber weiter unterstützt.

Gruss ppoket
 
dankeschön :)

zu dieser neuen möglichkeit: funktioniert mein programm auch noch unter 10.5, wenn ich die benutze, muss ich dann nen switch oder so einbauen?

Code:
	double grundseite = [Schenkela doubleValue];
	double schenkel = [Schenkelb doubleValue];
	double hohe = [Schenkelh doubleValue];
	double umfang;
	double flache;
	if (schenkel = 0) {
		umfang = grundseite + sqrt(grundseite * grundseite / 4 + hohe * hohe) * 2;
		flache = grundseite * hohe / 2;
	}
	else {
		umfang = schenkel * 2 + grundseite;
		flache = sqrt(schenkel * schenkel - grundseite * grundseite / 4) * grundseite / 2;
		
	}


	[SchenkelA setDoubleValue:flache];
	[SchenkelU setDoubleValue:umfang];

ich weiß nicht warum, aber ich kriege hier "nan" als ergebnis für die Fläche (flache). liegt das daran, dass ich bei der if-funktion als bool nicht double = zahl setzten darf?