Frage

Ich versuche, eine Warnung Ansicht anzuzeigen, sobald die Ansicht angezeigt wird (ohne eine Taste). In viewcontroller.m ich habe:

- (void) viewWillAppear:(BOOL)animated
{
    UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: @"User Information" message: @"Hello"
                              delegate: self cancelButtonTitle:nil otherButtonTitles: @"Continue", nil];

    [alert show];

    [alert release];
}

und in viewcontroller.h ich habe:

IBOutlet UIView *alert; 

Ich habe nichts zu meiner .xib Datei.

Wenn auf dem Simulator laufen ich folgendes in der Konsole erhalten:

2009-11-30 23: 41: 36,079 BatteryApp [867: 20b] *** Beenden app aufgrund abgefangene Ausnahme 'NSInternalInconsistencyException', Grund: ‚- [UIViewController _loadViewFromNibNamed: bundle:] geladen, um den "BatteryAppViewController" nib aber die Ansicht Auslass wurde nicht festgelegt. "

Irgendwelche Ideen, wo ich schief gelaufen haben, etwas mit meinem xib zu tun?

Bearbeiten // Ich verbinde Benachrichtigung an eine neue Ansicht in meinem xib, noch kein Glück

War es hilfreich?

Lösung

Das Problem ist, dass die beiden Core Animation (die für die aktuelle Ansicht betrachten, und derjenige, der den Alarm für die Ansicht) überlappen. Sie müssen diese beiden Animation bewegt sich trennen, durch diese Problemumgehung folgt vor:

  1. Haben Sie den Alarmcode in viewDidAppear, anstatt viewWillAppear

  2. Anruf [alert performSelector:@selector(show) withObject:nil afterDelay:0.0]. Dadurch wird sichergestellt, dass die Warnung tritt nach der aktuellen Animation beenden.

Sie müssen möglicherweise über die Freigabe alert ganz noch vorsichtig sein. Wenn ich Sie wäre, würde ich ein separates Verfahren (z.B. showHelloAlert), und es dann von viewDidAppear nennen:

- (void)viewDidAppear: (BOOL)animated {
  [self performSelector:@selector(showHello) withObject:nil afterDelay:0.0f];
  [super viewDidAppear:animated];
}

Andere Tipps

Versuchen Sie, den Alarm in viewDidAppear setzen.

Auch, was ist das IBOutlet für? Versuchen Sie, die ganze Sache herausnehmen.

Öffnen Sie Ihre xib Datei im Interface Builder und steuern ziehen aus dem Dateieigentümer zu Ihrer Ansicht (die der Klasse BatteryAppViewController sein sollte) (nicht die Warnung) und wählen Sie Ansicht aus dem Menü, das erscheint. Das Protokoll zeigt Sie diese Abgangsverschraubung nicht gemacht haben.

Sie verbinde nicht UIAlerts im Interface Builder auf. Eine Benachrichtigung nicht über anpassbare nibs so dass Sie sie nicht in Interface Builder laden. Sie müssen die entfernen:

IBOutlet UIView *alert;

... vollständig.

Die Fehlermeldung besagt, dass Sie keine Aussicht für Ihren View-Controller definiert haben. Sie müssen, dass im Interface Builder einzurichten.

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