• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Programm rechnet zeigt aber nichts an, wenn Methode manuel aufgerufen wird

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
öhhh, habe das jetzt so gemacht:
Code:
NSData *myData=[[NSData alloc] initWithContentsOfFile:@"Julia-Fraktal.app/Contents/Resources/Julia-Teppich.png"];
	juliaTeppichPicture = [NSBitmapImageRep imageRepWithData:myData];
hatte das "Julia-Fraktal.app" vergessen

Aber jetzt habe ich eine andere Frage:
wie kann man ein geschlossenes Fenster aus der .xib öffnen? Will jetzt ein weiteres Fenster hinzufügen, wo man eine Art Tabelle aller Fraktale hat und man die beiden obersten Werte gezielter eingeben kann. Das ding bist jetzt ist, dass beim Programmstart alles super angezeigt wird (also wenn ich das Fenster dann mit öffnen lasse). Leider kann diese View nicht in ihrer Größe verändert werden, die View hängt sich sozusagen auf und die gesamte Darstellung verschwindet, sobald man mit irgendwas drüber fährt

Code:
- (id)initWithFrame:(NSRect)pFrameRect{
    self = [super initWithFrame:pFrameRect];
    if (self) {
        nsRectFrameRect = pFrameRect;
    }
    return self;
}

- (void)awakeFromNib {
	NSData *myData=[[NSData alloc] initWithContentsOfFile:@"Julia-Fraktal.app/Contents/Resources/Julia-Teppich.png"];
	juliaTeppichPicture = [NSBitmapImageRep imageRepWithData:myData];
	[juliaTeppichPicture incrementalLoadFromData:myData complete:YES];
	[self setNeedsDisplay:YES];
}

- (void)drawRect:(NSRect)prect {
    [juliaTeppichPicture drawInRect:prect];
}
Das Ding ist, dass das nahezu genauso wie die Myview ist, und dennoch möchte er nicht so gerne resizen
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
öhhh, habe das jetzt so gemacht

... und das ist für diese Aufgabe Quark ;)

Dein Code ist leider echt schlecht und Du solltest zunächst Grundlagen erlernen.
Sich durchfragen ist keine Lösung.

Viele Grüße
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Ich gebe LittlePixel völlig recht und ich denke, wenn du die Grundlagen mal hast, kannst du dieses Programm ohne Fehler und ohne weitere Probleme schreiben, ist glaub ich keine grosse Sache.

Zum Code fürs Laden des Bildes: Dieser Pfad ist unvollständig und kann nicht funktionieren. Der Computer muss einen absoluten Pfad, vom root des Dateisystems aus kriegen, sonst geht gar nix. Bei deinem Beispiel fehlt also der Pfad vom root zu deiner Applikation!
Wenn du ihn jetzt vollständig machst, kommt das nächste Problem: Was, wenn der Benutzer die Applikation irgendwohin verschiebt? Der Pfad wird ungültig!

Darum: Benutze NSBundle zum Laden von Ressourcen innerhalb des Application-Bundles. Die Doku kannste selber lesen!

Gruss ppocket
 

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
mhh das geht jetzt aber mit der Pfadangabe so^^ "folder" ist direkt im Ordner wo sich auch das Programm Bundle befindet, "/" root Verzeichnis und "~" ist der Benutzerordner...
aber das mit dem NSBundle hört sich trotzdem gut an, werde das wohl dann trotzdem austauschen
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Ich verstehe deine Antwort nicht... :S

Du kannst mir nicht angeben, dass das so funktioniert:

"Julia-Fraktal.app/Contents/Resources/Julia-Teppich.png"

Wenn du nämlich hier nachliest, wird ein absoluter Pfad verlangt! Das heisst eben nun mal, dass es ca. so aussehen sollte, wenn sich das Programm im Applicationsordner befindet:

"/Applications/Julia-Fraktal.app/Contents/Resources/Julia-Teppich.png"


Für den Benutzerordner:

"~/Julia-Fraktal.app/Contents/Resources/Julia-Teppich.png"


Dein Pfad ist aber relativ zum Ordner, aus dem das Programm gestartet wurde und das funktioniert nun mal nicht. Du kannst schon relative Pfade benutzen - zB. im Terminal - aber dort musst du immer vorher die "working directory" einstellen. Dann wird im Terminal eigentlich der von dir eingegebene, relative Pfad mit dem absoluten Pfad der "working directory" ergänzt und voilà, du hast wieder einen absoluten Pfad!

Was ich mit dem "Problem", das sich da noch stellt, sagen wollte:

Wenn der Benutzer das Programm zum Beispiel in den Benutzerordner verschiebt (ist nicht erwünscht aber auch nicht verboten), wird laut deinem Code aber immer noch im Applications-Ordner nach deinem Programm (und dem Fraktal-Bild) gesucht. Dort wird sich aber dann nichts mehr befinden -> Crash!

Mit NSBundle bist du immer schön im Application-Bundle drin und kannst Ressourcen suchen und laden - egal wo sich das Programm im Dateisystem befindet.

--

Ich sags nochmal... Objective-C ist nur die Programmiersprache, welche für Cocoa verwendet wird, aber eben nicht Cocoa IST. Das will heissen, dass Objective-C im Griff haben (was du, wie ich glaube, hast), noch lange nicht heisst, auch Cocoa zu verstehen und zu beherrschen. Cocoa ist raffiniert aufgebaut und mit viel Köpfchen erdacht worden. Ich habe noch nie ein so praktisches und nahezu perfektes Framework (Bibliothek) gesehen. Aber: Es funktioniert nur gut, wenn du dich an die Richtlinien von Cocoa hälst und ?!sorry!? die kennst du nicht!

Daher mein Rat und auch der Anderer: Lies die Doku! Mach Einsteigerbeispiele! Lerne Cocoa richtig anzuwenden! Dann wird eine solche Applikation, wie du sie erstellen willst, wie ich schon sagte, keine Probleme mehr stellen!

nichts für ungut, ppocket
 
Zuletzt bearbeitet: