1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

unrecognized selector sent to instance

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Bissy, 08.03.10.

  1. Bissy

    Bissy Johannes Böttner

    Dabei seit:
    03.02.07
    Beiträge:
    1.159
    Hi,

    habe eben - angelehnt an die Übungsaufgaben aus dem Buch von Amin Negm-Awad mal versucht, eine Art minimalistischen Währungsrechner zu bauen.

    Leider bekomme ich nun in der Konsole folgende Meldung:

    Code:
    [Switching to process 83163]
    Running…
    2010-03-08 23:23:48.604 Converter3[83163:a0f] -[_NSControllerObjectProxy copyWithZone:]: unrecognized selector sent to instance 0x10042e830
    2010-03-08 23:23:48.607 Converter3[83163:a0f] -[_NSControllerObjectProxy copyWithZone:]: unrecognized selector sent to instance 0x10042e830
    2010-03-08 23:23:48.618 Converter3[83163:a0f] -[_NSControllerObjectProxy copyWithZone:]: unrecognized selector sent to instance 0x100445d80
    2010-03-08 23:23:48.618 Converter3[83163:a0f] -[_NSControllerObjectProxy copyWithZone:]: unrecognized selector sent to instance 0x100445d80
    Leider kann ich damit nichts anfangen. Bin das aus anderen Programmiersprachen so gewöhnt, dass der Compiler auch so Sachen meldet wie "Fehler in Zeile xy". Leider geschieht das hier ja nicht, ich weiß also gar nicht, wo ich anfangen soll, zu suchen.

    Habe dann eben noch mal das Buch aufgeschlagen und die Schritte durchgesehen... Leider ohne Erfolg, ich finde keine Stelle, an der ich etwas falsch gemacht habe.

    Vielleicht springt ja jetzt einer auf und sagt "jaaaaa.... Bei der Fehlermeldung guckst du IMMER an Stelle xy" :D

    Danke
     
  2. gKar

    gKar Maunzenapfel

    Dabei seit:
    25.06.08
    Beiträge:
    5.362
    Ich bin ja kein erfahrener Obj-C-Programmierer, aber soviel theoretische Grundkenntnisse über diese Sprache habe ich schon:
    Ein Methodenaufruf wird dynamisch aufgelöst. Dazu wird eine Nachricht an eine Objekt-Instanz geschickt. Die auszuführende Methode wird dabei über einen sog. „Selector“ spezifiziert.

    In Deiner Fehlermeldung steht also m.E., dass weder das angesprochene Objekt noch eine seiner Superklassen eine Methode aufweist, die zum geschickten Selector (das dürfte „CopyWithZone:“, also eine Methode mit genau einem Parameter sein) passt.

    Wobei ich mich schon frage, wie das programmiert wurde, dass der Fehler erst zur Laufzeit auftritt. Wenn nicht mit „id“-Variablen, sondern mit typisierten Zeigern auf Objekte gearbeitet wird, müssten solche Aufrufe meines Wissens schon Compilerwarnungen auslösen.

    Aber wie gesagt: Ich kenne nur theoretische Grundzüge der Sprache und habe keine praktischen Erfahrungen.
     
  3. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    gKar sagt eigentlich alles, was es hierzu zu sagen gibt. Du sendest einen Methodenaufruf an ein Objekt, welches diese Methode nicht kennt. Da du das Objekt nicht richtig typisiert hast, merkt der compiler den Fehler nicht, weil die Methoden erst zur Laufzeit gebunden werden (resp. geschaut wird, was das jeweilige Objekt versteht, und was nicht). dynamic binding nennt man das. Praktisch aber eine häufige Fehlerquelle.

    Ich kann dir nicht sagen, was _NSControllerObjectProxy für eine Klasse ist, aber irgend einen Fehler produzieren Instanzen von dieser Klasse. Die Methode ist, wie schon gesagt wurde: - copyWithZone: ... Es sieht ganz danach aus, als ob du als Programmierer nicht viel mit diesem Fehler zu tun hast, es sei denn, du verwendest diese Instanzen von _NSControllerObjectProxy. Dies ist aber mit grosser Wahrscheinlichkeit eine undokumentierte Hilfsklasse in Cocoa.

    Versuch den Fehler mit NSLog und/oder breakpoints einzugrenzen und poste dann mal den Abschnitt, in dem der Fehler auftaucht.

    Gruss ppocket
     
  4. Bissy

    Bissy Johannes Böttner

    Dabei seit:
    03.02.07
    Beiträge:
    1.159
    Habe schon mit den Breakpoints versucht es einzugrenzen. Habe einen Breakpoint nach der ersten Zeile in meinem Header gesetzt und der Fehler taucht trotzdem auf. Die Methode "copyWithZone:" sagt mir nichts, habe diese also auch nicht implementiert. Ich habe nur eine Methode, die heißt "convert". Ich denke, dass das Problem an der Core Data liegt. Habe da noch so meine Probleme mit den Bindings und denke einfach mal, dass ich da ein Häkchen falsch gesetzt habe oder so.
     
  5. Bissy

    Bissy Johannes Böttner

    Dabei seit:
    03.02.07
    Beiträge:
    1.159
    Habe jetzt mal meinen Array Controller gelöscht und damit auch alle Bindings.. Nun startet das Programm. Werde jetzt die Bindings nochmal neu setzen. Finde es manchmal etwas verwirrend, zu selektieren, welche Auswahl bei "Controller Keys" bzw. "Model Key Path" bei den Bindings gemacht werden muss. Gibt es da noch weiter gehende Literatur?

    In dem Buch wird mehr oder weniger einfach gesagt, "dies und jenes anklicken", aber warum und was die Alternativen bewirken, bleibt etwas außen vor. Ich glaub ich durchforste mal die Documentation.
     
  6. Bissy

    Bissy Johannes Böttner

    Dabei seit:
    03.02.07
    Beiträge:
    1.159
    So, habe jetzt eine Auflösung. Ich habe keine Ahnung warum, aber jetzt läuft es einwandfrei. Habe einfach den Array Controller mal entfernt, dann ging es, allerdings logischerweise ohne die Funktionalität. Dann habe ich ihn wieder eingefügt, die Bindings neu gesetzt und jetzt läuft es.
    Habe mich auch mal ein bisschen durch die Documentation gesucht um etwas darüber rauszufinden, was die ganzen Einträge bei den Bindings bedeuten (selection, arrangedObjects usw), leider aber nichts genaues gefunden. Vielleicht hat da ja jemand mal einen netten Link für mich.
     
  7. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Diese Begriffe bedeuten in den allermeisten Fällen genau das, was sie sagen. Selection ist das ausgewählte Objekt. ArrangedObjects die Objekte im Array, welche er verwaltet.
     
  8. sumpfmonsterjunior

    sumpfmonsterjunior Morgenduft

    Dabei seit:
    17.03.05
    Beiträge:
    167
    Nur von den Stichworten CoreData und Bindings Deiner copyWithZone-Fehlermeldung vermute ich, dass Du (in einer Tableview?) direkt an ein NSManagedObject gebunden hast. NSManagedObject implementiert nicht das NSCopying-Protokoll. Das copyWithZone rufst Du auch nicht direkt auf, das machen die Controller.

    In welchem Zusammenhang tritt der Fehler denn auf?
     
  9. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.469
    Ich habe da so eine Ahnung. Du bindest sicherlich einen NSTableView über einen NSArrayController an Dein Modell. Dabei hast Du vermutlich eine Bindung nur an die selection vom NSArrayController gemacht und nicht noch die Konkrete Eigenschaft angegeben. Die Methode selection von den NS...Controllern liefert ein Proxy-Objekt zurück, welches vollständig Key-Value-Coding compliant ist, wie das „Originalobjekt“ im Modell. NSTableView erstellt unter gewissen Bedingungen Kopien von den darzustellenden Objekten und so bekam dann wohl so ein Proxy-Objekt eine copyWithZone:-Nachricht geschickt, die es nicht versteht.
    Jetzt bindest Du dann wohl richtig an selection.eigenschaft.

    MacApple
     
  10. Bissy

    Bissy Johannes Böttner

    Dabei seit:
    03.02.07
    Beiträge:
    1.159
    So in etwa muss es gelaufen sein. Ich war zwar sicher, dass ich es an das richtige Attribut in der selection gebunden hatte, aber es kann auch sein, dass da der Fehler drin steckte.

    Finde es einfach manchmal verwirrend. Den ganzen TableView auf arrangedObjects, dann die einzelne Spalte auf... tja seht ihr.. Da hörts schon wieder auf :) Jetzt muss ich wieder nachschauen. Aaarrgghhh
     

Diese Seite empfehlen