2010-11-22 5 views
0

Ich habe versucht, ein UIAlert zu meiner App hinzuzufügen, und es verursachte einen Absturz. SoUIAlert Delegierte, verursachen sie Konflikte mit anderen Teilen einer App?

i kommentierte meinen Code aus und ließ diese Methode nur

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
} 

Und hinzugefügt, um die Schnittstelle

<UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, UIAlertViewDelegate > 

Aber wenn ein Alarm, der bereits in dem App-Pop war, obwohl sein in einem anderen Klasse in der App. Es stürzt ab, sobald ich ok auf den Alarm drücke.

Gibt es einige seltsame Konflikte mit Alerts, auf die ich nie gestoßen bin?

Jeder kann vorschlagen, was passieren könnte. Die App stürzt ohne Ausgabe an die Debug-Konsole ab. Also kein Hinweis darauf, was das Problem vielleicht ist.

THanks -Code

+1

Möglicherweise sollten Sie versuchen, zuerst die Konsolenausgabe zu sehen. – Jirapong

+0

Hallo Jirapong. Wie gesagt: Die App stürzt ohne Ausgabe an die Debug-Konsole ab. Wenn die Konsole mir einen Hinweis geben würde, würde ich nicht nach deiner Intuition fragen, was da vor sich geht. –

+0

Absturz ohne einen Hinweis ist in der Regel ein Überlassungsproblem oder Protokollierung eines Zeigers als int – griotspeak

Antwort

3

Nein, es gibt keine seltsamen Konflikte mit Warnungen. Sie können sogar mehrere Warnungen von einer einzelnen Klasse haben, wenn Sie die tag -Eigenschaft und überprüfen Sie in der Delegierten dafür.

Normalerweise weist ein Absturz darauf hin, dass Sie den Delegierten zu früh freigegeben haben. Wenn Sie einen Delegaten hinzufügen, behält er ihn nicht bei (um Release-Zyklen zu vermeiden), so dass Sie manuell sicherstellen müssen, dass er immer noch vorhanden ist, wenn Sie die Schaltfläche drücken.

Sie können dies überprüfen, indem Sie in allen Delegatmethoden einen Haltepunkt setzen.

0

Basis auf Ihre Antwort zu den Kommentaren oben. Es sieht so aus, als wäre Ihr Delegat-Objekt früher freigegeben. Ich bin mir nicht sicher, wie Sie das UIAlert deklarieren, aber normalerweise mag ich das.

  1. Verwenden UIAlertViewDelegate wie du
  2. clickedButtonAtIndex implementieren, wie Sie
  3. Anruf UIAlert tat und lassen Sie ihn in einem Verfahren wie diesem

/* Code */

-(void) showSomething 
{ 
    UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"title here" 
         message:@"message here." 
         delegate:self 
         cancelButtonTitle:@"Cancel" 
         otherButtonTitles:@"Settings", nil] autorelease]; 

    [av show]; 
} 

Ich hoffe das hilft.

Verwandte Themen