Eine Tonne Fehler bei Release Konfiguration

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • gritsch schrieb:

    junky94 schrieb:

    NSPoint point = [displayedView convertPoint:[theEvent locationInWindow] fromView:nil];


    ja dann haben wir den fehler ja schon!

    NSPoint ist nicht das selbe wie CGPoint!

    Darauf kommt es nicht an.

    Es kommt darauf an, dass es sich in manchen Architekturen nicht automatisch casten lässt.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • junky94 schrieb:

    okay und wie bekomm ich dann einen cgpoint aus nspoint? weil CGRectContainsPoint will ja ein CGPoint?

    Das hatte ich doch schon erklärt: Benutze die dafür vorgesehenen Makros.

    junky94 schrieb:

    Und wieso hats bei der Debugging-Konfiguration funktioniert?

    Das hatte ich doch schon erklärt: Im Debugging wirst du nur eine LP64-Architektur erzeugen. Da trifft sich dein Typ zufällig mit dem von CG. Hier sieht man schön, was passiert, wenn man sich auf derlei Zufälle verlässt. Das ist dann eben wie mit dem Krug und dem Brunnen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • junky94 schrieb:

    longW schrieb:

    gritsch schrieb:

    junky94 schrieb:

    NSPoint point = [displayedView convertPoint:[theEvent locationInWindow] fromView:nil];


    ja dann haben wir den fehler ja schon!

    NSPoint ist nicht das selbe wie CGPoint!


    Ja. Mit einem 'cast' könnte er es allerdings hinbiegen:
    When building for 64 bit systems, or building 32 bit like 64 bit, NSPoint is typedef’d to CGPoint.

    NSPoint
    was ist denn der unterschied zwischen 64- und 32 bit? Auf 64-bit Intel funktioniert mein app tadellos

    Die in der Struktur verwendeten Datentypen sind bei CG immer für 64 Bit gedacht, bei NS aber 32 oder 64 Bit. Das liegt daran, dass man ja nicht einfach auf 64 Bit umstellen konnte, da es ja existieredne Programe gab. Umgekehrt wollte Apple wohl nicht gleich zwei CG mitliefern, was sicherlich auch Probleme gegeben hätte.

    Also verwendet man als Programmierer wie "früher" nur NS, dann fällt das alles gar nicht auf. Oder man verwendet NS und CG, dann muss man sich aber um die Konvertierung selbst kümmern.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Abgesehen von der Kompatibilität der Typen unter den verschiedenen Architekturen wäre ich sehr vorsichtig, NSRect und CGRect und die entsprechenden Funktionen miteinenader zu vermischen - selbst mit Konvertierung, denn sie sind semantisch unterschiedlich: Ein NSRect mit negativer Höhe oder Breite ist per Definition leer, ein entsprechendes CGRect nicht - es ist umgeklappt. Beispiel:

    Quellcode

    1. NSRect nsRect = NSMakeRect(3,3,-2,-2);
    2. NSPoint nsPoint = NSMakePoint(2,2);
    3. NSLog(@"NSRect containsPoint: %i",NSPointInRect(nsPoint,nsRect));
    4. CGRect cgRect = NSRectToCGRect(nsRect);
    5. CGPoint cgPoint = NSPointToCGPoint(nsPoint);
    6. NSLog(@"CGRect containsPoint: %i",CGRectContainsPoint(cgRect,cgPoint));

    Man könnte meinen, dass da zweimal das gleiche Ergebnis rauskommt, tut es aber nicht.
    Multigrad - 360°-Produktfotografie für den Mac
  • mattik schrieb:

    Abgesehen von der Kompatibilität der Typen unter den verschiedenen Architekturen wäre ich sehr vorsichtig, NSRect und CGRect und die entsprechenden Funktionen miteinenader zu vermischen - selbst mit Konvertierung, denn sie sind semantisch unterschiedlich: Ein NSRect mit negativer Höhe oder Breite ist per Definition leer, ein entsprechendes CGRect nicht - es ist umgeklappt. Beispiel:

    Quellcode

    1. NSRect nsRect = NSMakeRect(3,3,-2,-2);
    2. NSPoint nsPoint = NSMakePoint(2,2);
    3. NSLog(@"NSRect containsPoint: %i",NSPointInRect(nsPoint,nsRect));
    4. CGRect cgRect = NSRectToCGRect(nsRect);
    5. CGPoint cgPoint = NSPointToCGPoint(nsPoint);
    6. NSLog(@"CGRect containsPoint: %i",CGRectContainsPoint(cgRect,cgPoint));

    Man könnte meinen, dass da zweimal das gleiche Ergebnis rauskommt, tut es aber nicht.

    Oh, ja, wichtiger Punkt!
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?