2012-09-04 15 views
19

Ich arbeite an iOS 6. Meine Anwendung verfügt über einen Standard-Navigation-Controller mit einem CustomViewController eingebettet. In diesem Controller erstelle ich eine modale Ansicht wie folgt aus:Seltsames Warning Modal Ansicht Controller

-(IBAction)presentModalList:(id)sender { 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    StationsListViewController *list = [storyboard instantiateViewControllerWithIdentifier:@"StationsListViewController"]; 
    [list setStationsData: [self.stationsData allValues]]; 
    [self presentModalViewController:list animated:YES]; 
} 

Die Show modal Controller perfekt aber entlasse gibt eine Warnung aus. Das Verfahren in diesem Controller entlassen ist:

-(IBAction)backToMap 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

Die Warnung erzeugt wird, Warnung:

Versuch von View-Controller < UINavigationController zu entlassen: 0x1ed91620> während einer Präsentation oder im Gange ist zu entlassen!

Irgendwelche Hinweise dazu?

Dank

+0

Verwandte - http: // Stackoverflow. com/questions/1412021/iphone-crashing-wenn-presenting-modal-view-controller – ChrisF

Antwort

28

Ich weiß, das eine späte Antwort, aber vielleicht wird dies jemand anderes für eine Lösung dieses Problems suchen helfen, hier ist das, was ich getan habe:

-(IBAction)backToMap 
{ 
    if (![[self modalViewController] isBeingDismissed]) 
     [self dismissModalViewControllerAnimated:YES]; 
} 

Für mich, fand ich diese Zeile der Code wurde mehrmals aufgerufen, ich konnte nicht herausfinden, warum dies der einfachste Weg war.

+6

Ich lief auch in dieses Problem. Es kann passieren, dass Ihr Aufruf 'dimissModalViewControllerAnimated:' in eine Callback-Methode (IBAction) eingefügt wird, die (direkt oder indirekt) durch Antippen der Schaltfläche 'Abbrechen' in der modalen Ansicht ausgelöst wird. So kann 'disfuseModalViewControllerAnimated: 'möglicherweise ein Duplikat sein und kann entfernt werden. – smileyborg

+1

Ich hatte ein ähnliches Problem, aber es wurde von einem ViewController verursacht, dann fast sofort entlassen (also entlassen wurde während der vorliegenden Animation.) Also musste ich 'isBeingPresened' überprüfen. – Olie

+0

Es ist komisch.Ich denke @smileyborg ist auf etwas. Aber ich sehe nicht, warum es scheinbar automatisch ablehnt? Alles, was ich getan habe, war eine Abwicklungsaktion, und ich muss sie nicht direkt abtun? – huggie

14

Dank JDx für mich auf dem richtigen Weg. Ich passte es, diese Lösung zu bilden, die die Warnung ohne Verwendung von Funktionen zu entfernen, die in iOS 6 sind veraltet:

-(IBAction)backToMap 
{ 
    if (![self.presentedViewController isBeingDismissed]) { 
     [self dismissViewControllerAnimated:YES completion:^{}]; 
    } 
} 
0

ich diesen Ansatz gefunden unzuverlässig zu sein - ein Fall in fünf sagen, ich würde immer noch den Fehler sehen .

Meine Lösung bestand darin, den Completion-Block zu verwenden, um ein Flag zu setzen, das kontrolliert, ob es sicher zu entlassen ist - auf diese Weise müssen Sie nicht überprüfen, ob die Ansicht gelöscht wird oder nicht.

-(IBAction)presentModalView:(id)sender { 
    : 
    self.canDismiss = NO; 
    [self presentViewController:aVC animated:YES completion:^{ 
     self.canDismiss = YES; 
    }]; 
    : 
} 

Im Stück Code, wo tritt die entlassen, nur die Flagge überprüfen:

-(void)dismisser { 
    : 
    if (self.canDismiss) { 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 
    : 
} 

Simsalabim, keine Fehler mehr!

0

iOS6 Targeting, das ist was für mich gearbeitet:

if (![self.presentedViewController isBeingDismissed]) 
    [self.presentedViewController dismissViewControllerAnimated:YES 
                completion:nil]; 
0

Sie können unabhängig machen Sie nach dem Abschluss des Verfahrens entlassen wollen als:

-(IBAction)backToMap 
{ 
    [self dismissViewControllerAnimated:YES 
          completion:^{ 
           //Do something here 
          }]; 
} 
Verwandte Themen