Frage

Ich bin ein totaler noob iPhone-Programmierung, und ich habe in eine Ausnahme laufen geworfen, dass ich einfach nicht meinen Kopf wickeln um.

Hintergrund: Der Fehler wird in einem benutzerdefinierten subview geschieht, und tritt sofort das Programm beim Laden. Ich bin eine Ausnahme in der überschriebenen drawRect Methode geworfen zu bekommen. Der Code wirft den Fehler folgt:

- (void)drawRect:(CGRect)rect{
    NSNumber *points = [NSNumber numberWithInt: star.numberOfPoints];
    //HERE. Doesn't recognize selector?!
    CGPathRef t = (CGPathRef)[starPaths objectForKey:points];
 /*snip*/

starPaths wird in awakeFromNib als NSMutableDictionary mit einer Kapazität initialisiert 1.

Die Ausnahme, die ausgelöst wird immer ist - [NSObject doesNotRecognizeSelector:]

starPaths wird in der Header-Datei für die Ansicht als

deklariert
    NSMutableDictionary *starPaths;

und wird als

initialisiert
- (void)awakeFromNib{
    starPaths = [NSMutableDictionary dictionaryWithCapacity: 1];
} 

Schließlich habe ich nicht in der Lage gewesen, zu einem Punkt in dem Code zu bekommen, wo ich erfolgreich Elemente zum Wörterbuch hinzufügen, da der Code eines Eintrag hinzuzufügen, setzt eine Null-Antwort aus dem Wörterbuch, dass die, dass bestimmte zu wissen, auf Empfang Eintrag muss gebaut werden.

Irgendwelche Vorschläge? Jede andere Informationen, die ich sollte? Jede Hilfe bei allen geschätzt werden würde, ich fühle mich wie ich offensichtlich etwas fehlt bin, aber ich habe bashing meinen Kopf gegen das den ganzen Tag ohne Glück.

War es hilfreich?

Lösung

Wenn Sie nicht über die retain Variable starPaths oder explizit zuweisen, sich mit [[NSMutableDictionary alloc] initWithCapacity:1] dann wird es automatisch auf der nächsten Iteration der Laufschleife freigegeben werden.

Sie tun müssen,

starPaths = [[NSMutableDictionary dictionaryWithCapacity:1] retain];

oder

starPaths = [[NSMutableDictionary alloc] initWithCapacity:1];

So stellen Sie sicher, dass es release, wenn Sie nicht mehr benötigen.

Andere Tipps

Ein paar Dinge zu überprüfen:

  • Ist starPaths deklariert als NSMutableDictionary * Instanz-Variable? Sie erwähnen, dass es initialisiert wird. Haben Sie das dictionaryWithCapacity Methode (die eine Auto-Release-Objekt zurückgibt) oder initWithCapacity (die explizit festgehalten werden muss). Um sicher zu sein, können Sie es halten und loslassen, wenn Sie fertig.

  • Doppel überprüfen um sicherzustellen, dass die Header-Dateien richtig so die Erklärung von starPaths enthalten ist in Implementierungsdateien enthält, die davon Gebrauch machen.

  • Im Allgemeinen, wenn Sie Geheimnis Fehler versucht es mit beschädigten Speicher zu tun hat. Versuchen Sie, einen Haltepunkt in der ersten Zeile der drawRect Methode setzen und macht einen „po starPaths“ im Debugger-Konsole Fenstern, um zu sehen, was drin ist und welche Art von Objekt der Laufzeit denkt es ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top