Es scheint, dass UIPageViewController den ursprünglichen Inhaltsansicht-Controller für immer hält. Zum Beispiel:
%Vor%Der startendeViewController wird erst freigegeben, wenn der PageViewController selbst freigegeben wurde.
Um diesen Fehler zu reproduzieren, erstellen Sie einfach ein neues Projekt in XCode mit der Vorlage für seitenbasierte Anwendungen. Und fügen Sie 3 Zeilen Code in DataViewController.m
hinzu %Vor%Wenn Sie die Demo-App in vertikaler Ausrichtung scrollen, erhalten Sie Protokolle wie folgt:
%Vor%DataViewController [0] wird nie freigegeben.
Irgendwelche Ideen dazu? Danke!
Verwenden Sie transitionStyle UIPageViewControllerTransitionStyleScroll? Ich stieß auf das gleiche oder ein ähnliches Problem, das bei der Verwendung von Page-Curl-Animationen zu verschwinden schien.
Das Problem wurde für mich komplizierter, weil ich einer UISliderBar erlaubte, die Position im Inhalt festzulegen. Also habe ich beim Ändern der UISliderBar setViewControllers aufgerufen: direction: animated: completion: was mehr und mehr View-Controller-Referenzen dazu brachte, in meinem UIPageViewController "hängen zu bleiben".
Ich benutze auch ARC. Ich habe keinen akzeptablen Weg gefunden, den UIPageViewController dazu zu zwingen, die zusätzlichen View-Controller-Referenzen loszulassen. Ich werde wahrscheinlich entweder den Seiten-Curl-Übergang verwenden oder mein eigenes UIPageViewController-Äquivalent implementieren, indem ich ein UIScrollView mit aktiviertem Paging benutze, damit ich meinen eigenen View-Controller-Cache verwalten kann, anstatt auf die Verwaltung des gebrochenen View-Controllers von UIPageViewController zu vertrauen.
Ich bin mir nicht sicher, ob Sie das Problem noch haben, aber ich hatte das gleiche Problem und ich fand die Lösung.
Ich kenne den Grund nicht, aber es funktioniert.
Ich setze den ersten viewController direkt nach addSubview
und nicht vor addChlidViewController
.
und der erste viewController wird zur richtigen Zeit die Zuordnung aufheben.
auch, ich habe gefunden, wenn
anrufen %Vor% vor addSubView
und der Abschlussblock wird nicht aufgerufen.
und ich denke, dieser Block ist der Grund, warum der erste ViewController nicht dealloc.
Ich werde herausfinden, warum es nicht Rückruf, und die Antwort verbessern ~
Prost
Nach ein paar Versuchen, herauszufinden, was bei einem ähnlichen Problem passierte, bemerkte ich, dass es in meinem Projekt zwei Gründe gab, die ein Retain-Problem verursachten und dazu führten, dass ein UIPageViewController für immer beibehalten wurde.
1) Zwischen dem UIPageViewController und dem UIViewcontroller wurde ein zirkulärer Verweis angezeigt (dies wurde behoben, indem die Eigenschaften in beiden Klassen von schwach auf stark geändert wurden)
2) und das Hauptproblem bestand darin,
zu ändern %Vor%bis
%Vor%Ich hoffe, das hilft jemandem
das gleiche Problem hier Ich löste es, indem ich meine anfängliche ViewController in der Variablen behielt und anstatt die selbe vc auf einem bestimmten pageIndex zu erstellen, benutze ich sie einfach wieder
Ich hatte dasselbe Problem und löste folgendes:
[startingViewController release];
wo der Endpunkt der Initialisierung.
dann wird der erste ViewController freigegeben.
Tags und Links memory-leaks uipageviewcontroller