2009-08-21 7 views
0

Ich baue meine App nach dem Hinzufügen von Code, aber ich bekomme die Un-Recognized Selector an Instance Error gesendet stoppen meine App zu laufen. Hier ist ein Bild von dem Fehler -Nicht erkannte Selector an Instance-Fehler gesendet

alt text http://www.grabup.com/uploads/20f66eecee4bd96198c7bbcfe647ec74.png?direct

Dies ist der Code I hinzugefügt (es ist für die Datenquelle eines NSOutlineView)

- (id)init 
{ 
    self = [super init]; 
    if (self != nil) { 
     // initialization code, rootsObjects is a NSArray instance variable 
     rootObjects = [NSArray arrayWithObjects:@"Joshua", @"Erne", nil]; 
    } 
    return self; 
} 

// here NSOutlineView asks how many children rows to display for a given item 
- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item 
{ 
    // if item is nil this should be a Root row, else I pass 0 for example but should be the count of objects contained in item 
    return (item == nil) ? [rootObjects count] : 0; 
} 

// here NSOutlineView asks if a given item can be expanded i.e contains children 
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item 
{ 
    // again I return YES for example, but should be based on the count of objects contained in item 
    return YES; //(item == nil) ? YES : ([item numberOfChildren] != -1); 
} 

// here NSOutlineView asks for the object (some treelike structure) assigned to the nth index child row of item 
- (id)outlineView:(NSOutlineView *)outlineView 
      child:(int)index 
      ofItem:(id)item 
{ 
    // if item is nil I opass the appropriate Root row, else I pass nil for example but should be an object contained in item 
    return (item == nil) ? [rootObjects objectAtIndex:index] : nil; 
} 

// here NSOutlineView asks for the objectValue (usually a NSString)) to be displayed in tableColumn for the given item 
- (id)outlineView:(NSOutlineView *)outlineView 
objectValueForTableColumn:(NSTableColumn *)tableColumn 
      byItem:(id)item 
{ 
    // pass the object we want to display in the tableColumn for item 
    return item ; 
    // here I pass item for example since I know it's a NSString, but usually will be something to compute. 
    // the [tableColumn identifier] property (that can be set in Interface Builder) is very useful here. 
} 

// here NSOutlineView asks for the NSCell to be used by tableColumn for the given item 
- (NSCell *)outlineView:(NSOutlineView *)ov 
dataCellForTableColumn:(NSTableColumn *)tableColumn 
        item:(id)item 
{ 
    // the nil tableColumn represents the unified root row style 
    if (tableColumn == nil) { 
     // pass a cell we want to be used as root row (assume we've have assigned "Name" as identifier of some tableColumn) 
     return [[treeTable tableColumnWithIdentifier:@"Name"] dataCell]; 
    } 
    // else just pass the default cell 
    return [tableColumn dataCellForRow:[treeTable rowForItem:item]]; 
} 

- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item { 
    return YES; 
} 

Hier ist der Code I in der gleichen Datei haben (die Datenquelle) wie der obige Code.

+0

Ich bin mir nicht sicher, ob die von Ihnen zur Verfügung gestellten Informationen ausreichend sind ... können Sie auch einen Stack-Trace hinzufügen? – fbrereto

+0

Der Fehler im Debugger lieferte keinen Stack Trace. Wie sonst finde ich es? – Joshua

+0

Geben Sie in der Debugger-Konsole "b objc \ _exception \ _throw" ein (oder fügen Sie eine Ausnahme mithilfe des Ausnahmenfensters hinzu, Run-> Show-> Breakpoints). Wenn der Debugger bricht, öffnen Sie das Debugger-Fenster (Run-> Debugger). Im oberen linken Bereich wird eine Stack-Kurve angezeigt. Irgendwo im Stach-Trace sehen Sie eine Kopie-Kopie Nachricht; Der erste Eintrag in Schwarz unter dem ist der Punkt in Ihrem Code, der das Problem auslöst. –

Antwort

1

Der Fehler sollte den Namen der Klasse angeben, die die nicht erkannte Methode und die unbekannte Methode empfangen hat, die gesendet wurde.

(1) Wenn Sie den Methodennamen erkannt haben - wenn Sie eine Zeile (oder Zeilen) Code geschrieben haben, der diese Methode aufruft - überprüfen Sie die Codezeile und stellen Sie sicher, dass das Ziel der Methode lautet Anruf ist gültig, ist vom richtigen Typ und wurde nicht irgendwo anders freigegeben.

Oft wird ein nicht erkannter Methodenaufruffehler verursacht, wenn Sie irgendwo ein Objekt überladen haben und ein neues Objekt vom falschen Typ im Speicher des alten Objekts residiert hat.

(2) Wenn Sie nicht einen Anruf an diese Methode geschrieben haben, dann haben Sie andere die falsche Art von Objekt zu einem gewissen Rahmen Verfahren oder wieder zugeführt wird, Sie haben etwas über freigegeben.

Wenn Sie über Release vermuten, auf NSZombies drehen oder die Zombie-Tracking-Funktion in Instruments verwenden (ja, was Peter sagte).

So ist der Fehler NSTreeControllerTreeNode ... doesn't respond to -copyWithZone:.

fast garantieren, dass, dass Sie einen Baum Controller Baumknoten in einem Wörterbuch irgendwo als Schlüssel und das Wörterbuch zu kopieren versucht, zu schieben versucht haben, anzeigt. Zumindest passiert das am typischsten.

Dies könnte noch ein über Release Problem sein, wenn eine Instanz von NSTreeControllerTreeNode geschieht in Erinnerung zu sitzen, wo ein NSString früher.

in der Dokumentation zu NSZombie für weitere Informationen Xcode Suchen sie einschalten in der aktuellen Version der Entwickler-Tools auf.

+0

Ich denke es muss No.2 sein. Wenn ich zum "Run with Performance Tool" -Menü gehe, gibt es keine Zombies-Option, wie Sie hier sehen können - http://www.grabup.com/uploads/56e2b7a108333326d1acc6bfdde7d064.png?direct – Joshua

+0

Nun, es könnte eine Zombies-Vorlage geben einige hypothetische zukünftige Version von Xcode, aber es gibt nicht in 3.1.3. Else –

+0

Was ich noch bemerkt habe ist, dass, wenn ich den Code von der ersten Frage loswerden die App gut läuft, ohne Probleme. Also muss das Problem irgendwo in diesem Code sein. – Joshua

0

NSTreeControllerTreeNode ist keine Standard-Cocoa-Klasse.

Meinen Sie NSTreeController oder NSTreeNode stattdessen verwenden?

+0

Das ist die Sache, ich habe es nicht wirklich benutzt. Was ich bemerkte, war, dass, als ich den Code losließ (der Code im ersten Post), die App ohne Probleme lief, also muss das Problem im Code vom ersten Post liegen. Und ich habe NSTreeControllerTreeNode dort nicht benutzt. – Joshua

+0

Was meinen Sie mit dem "Code im ersten Beitrag"? – Abizern

+0

Was ich meinte, war der Code, der in der Frage steht. – Joshua

Verwandte Themen