2009-08-05 12 views
0
// Add the button to the NSMutableArray. 
... 
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[[self hBtns] addObject:btn]; 
... 

// In another method, try to see if it exists. 
- (void)didPushBtn:(id)sender 
{ 
    UIButton *btn = (UIButton *)sender; 
    if ([[self hBtns] containsObject:btn]) // Is false every time. 
    ... 
} 

Warum erkennt es nicht, dass das UIButton in dem Array ist?NSMutableArray containsObject-Methode, die kein Objekt erkennt


EDIT

Es stellt sich heraus, dass sie es nicht einmal richtig erkennt, nachdem er hinzugefügt wird:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[[self hBtns] addObject:btn]; 
if ([[self hBtns] containsObject:btn]) // Returns false. 

Antwort

3

hatte ich vergessen, das Array (* doh *) zu initialisieren:

[self setHBtns:[[NSMutableArray alloc] initWithCapacity:0]]; 
+0

Das war tatsächlich mein nächster Vorschlag. Ich bin froh, dass du es sortiert hast. –

+0

Sie sollten auch sicherstellen, dass setHBtns: das Array nicht behält oder Sie ein Speicherleck haben. –

+0

Entweder das, oder ** sollte ** das Array behalten, und er könnte stattdessen '[NSMutableArray arrayWithCapacity: 0]' (oder nur '[NSMutableArray array]') verwenden. Die größere Frage in meinem Kopf ist, ob die Eigenschaft "readonly" sein sollte, und das Array sollte nur einmal im Initialisierer der enthaltenden Klasse erstellt werden. –

3

Klingt wie die isEqual: Vergleich ausfällt. Können Sie sich die hash für die UIButton an beiden Stellen ansehen (wo es hinzugefügt wird, und dann in didPushBtn) und sehen, ob sie den gleichen Wert haben?

+0

Danke für die Hilfe Meredith. Die Hashes sind gleich. Gibt es noch weitere Ideen, warum der Vergleich von isEqual: fehlschlägt? –

+0

Hey Meredith, siehe meine Bearbeitung der Frage. Vielleicht wird das helfen. –

+0

Nevermind, fand es heraus (siehe unten). Danke für deine Hilfe, ich weiß es zu schätzen! –