Es handelt sich im Grunde um das alte Speicherverwaltungsproblem.
[UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:path]]
gibt ein automatisch freigegebenes Objekt zurück, sodass es bald nach Abschluss Ihres Codeblocks automatisch freigegeben wird. Ich vermute, dass dies anders ist als presentModalViewController
, das eine Kopie für Sie behält, aber das ist eine Nebensache.
Grundsätzlich müssen Sie es behalten, bevor Ihr Codeblock endet. Der nervigere Teil ist, im Auge zu behalten, was der docController tut, damit Sie keinen Speicher verlieren. Sie müssen das Ergebnis von
[docController presentOptionsMenuFromRect:rect inView:self.view animated:YES];
überprüfen.
Wenn es NO zurückgibt, bedeutet dies, dass das Menü nie angezeigt wurde, und Sie sollten es sofort freigeben (wenn Sie bereits das Retain durchgeführt haben).
Wenn es jedoch YES zurückgibt, müssen Sie die Delegate-Methoden für docController implementieren und es freigeben, wenn das Menü geschlossen wird (in diesem Fall wäre das, wenn:
- (void)documentInteractionControllerDidDismissOptionsMenu:(UIDocumentInteractionController *)controller
aufgerufen wird.
BEARBEITEN: Ich möchte hier eine Korrektur vornehmen:
Die vorherige Antwort wird abstürzen, wenn das Popup-Menü geschlossen wird. Im Grunde gibt es wirklich keine gute Möglichkeit, einen wegwerfbaren DocController zu erstellen. Stattdessen denke ich, es ist am besten, einfach einen für jede Datei, die Sie im ViewController benötigen, zu erstellen, und deallokieren, wenn Sie komplett fertig sind. Andernfalls werden Sie in eine Vielzahl von möglichen Fällen geraten, in denen der DocController zu früh freigegeben wird und abstürzt.
0 Stimmen
Auf welcher Zeile wird der Fehler geworfen?
0 Stimmen
Auf dieser Linie: [docController presentOptionsMenuFromRect:rect inView:self.view animated:YES];