2012-04-12 11 views
10

ich ein verwaltetes Dokument mit openWithCompletionHandler:UIDocument openWithCompletionHandler Abschluss nicht auf iOS-Gerät

Das Problem, das ich in komme zu öffnen versuche ist, dass es auf dem Simulator funktioniert gut, aber wenn ich testen Sie es auf meinem iPhone 4 die Vollendung Handler beendet nie. Der Code sieht wie folgt aus:

[theManagedDocument openWithCompletionHandler:^(BOOL success){ 
    if(success) [self documentIsReady]; 
    if(!success) NSLog(@"Couldn't Open Document"); 
}]; 

Dieses feine auf dem Simulator funktioniert, und ich komme zu dem documentIsReady Anruf (oder das „Could not Open Document“, wenn es Fehler). Auf dem iPhone 4 wird jedoch niemals der CompletionHandler-Block ausgeführt. Ich habe überall im Block Breakpoints gesetzt (vor und nach beiden if-Anweisungen) und nichts wird aufgerufen. Nein "Dokument konnte nicht geöffnet werden" auf der Konsole, kein Anruf an documentIsReady.

Ich muss auch erwähnen, dass es scheint, als ob das erste Mal, wenn ich die App auf dem iPhone laufen lassen wird es richtig funktioniert. Ich habe dies auch in einer if-Anweisung mit einem fileExistsAtPath: Aufruf eingekapselt. Es wird in die if-Anweisung rein und ruft die openWithCompletionHandler:, aber der Abschlussblock nur nie gefeuert.

Ich verwende iOS 5.1 und Xcode 4.3.2.

Antwort

7

In meinem Fall, mein iPad ausschalten und neu starten es "behoben" dieses Problem. Viel Glück!

+1

Ich löschte die App, startete alles neu und es scheint besser zu sein. Ein bisschen mehr Arbeit als diese Antwort, aber das ist nahe genug. Immer noch nicht sicher, was es verursacht hat. –

+1

Es ist unheimlich, wie oft das Neustarten des Geräts Fehler behebt. – Anton

2

Versuchen Sie zu überprüfen, dass dasManagedDocument! = Nil vor dem Aufruf - das ist der einzige Grund, warum ich mir vorstellen kann, warum der Block nicht ausgeführt werden würde.

8

Ich habe das gleiche Problem in meinen Apps, die iCloud verwenden, um Daten zu teilen. Ich habe festgestellt, dass openWithCompletionHandler: nur wartet und nie den Beendigungshandler aufruft, wenn das Dokument von einer gesperrten App geöffnet bleibt. Wenn dies bei Ihnen der Fall ist, sollten Sie sicherstellen, dass Sie das Dokument schließen, wenn Ihre App in den Hintergrund wechselt.

+0

Ich habe auch im Wesentlichen das gleiche Verhalten erlebt, wenn ich vergessen habe, meine benutzerdefinierte UIDocument-Klasseninstanz innerhalb des Completion-Handlers freizugeben. Es bleibt nur geöffnet und hängt beim zweiten Mal, wenn ich versuche, openWithCompletionHandler aufzurufen. – vargonian

+0

@vargonian Das würde Sinn machen ... außer dass dieses Problem auch bei ARC (die Speicher behandelt) auftritt. –

0

Ein weiterer Grund, warum success falsch sein kann, ist, dass Sie Ihr Modell geändert haben (z. B. eine Eigenschaft zu einer Entität hinzugefügt), aber die App nicht aus Simulator/Gerät gelöscht haben, um das Modell zu aktualisieren.

+0

möglicherweise, aber ich wurde nicht "Erfolg" als falsch. Ich bekam nichts zurück. –