Warum haben meine PHFetchResultChangeDetails indizes geändert, als alles, was ich getan habe, am Ende eingefügt wurde?

9

Ich schreibe eine iOS8-App mit dem Photos-Framework. Ich liebe wirklich PHFetchResultChangeDetails. Aber da ist etwas, was ich nicht verstehe: Wenn ich neue Fotos mit dem folgenden Code auf der Kamera speichern will, bekomme ich dann Einfügungen UND Änderungen zurück. Ich erwarte nur Einfügungen.

Um es konkret zu machen:

%Vor%

Die Operation besteht darin, 3 Fotos mit dem obigen Code einzufügen. Vorher: 5 Fotos auf dem iPad. Nachher: ​​8 Fotos in ipad. Breakpoint auf PHFetResultChangeDetails-Handler zeigt:

%Vor%

- & gt; GUT: macht Sinn! Dies sind die Fotos, die ich gerade eingefügt habe (die letzten 3 Indexpfade).

%Vor%

- & gt; VERSTEHEN SIE NICHT: Warum gelten diese als "verändert"? Dies sind die vorhandenen Fotos auf der Kamerarolle ... Ich habe ihnen nichts getan.

Danke für Ihre Hilfe.

UPDATE: Es sieht so aus, als ob es etwas mit der Auswahl zu tun haben könnte. Ich habe vergessen zu erwähnen, dass dies passiert, wenn bereits einige Zellen ausgewählt sind. Was ich sehe ist, dass, wenn neue Elemente am Ende der CollectionView eingefügt werden, einige ausgewählte Zellen zufällig abgewählt werden - ich denke diejenigen, die changeIndexPaths haben. Wow, das ist scheiße - ich kann nicht sehen, wie mein Code das machen kann! Irgendwelche Hinweise?

UPDATE2: so scheint es, dass die unechten changeIndexPaths immer die 3 indexPaths direkt vor den Einfügungspfaden sind (die immer am Ende sind). Warum?!

UPDATE3: Ich sehe auch Abstürze in den performBatchUpdates von UICollectionView, wenn die Datenquelle vorher korrekt auf dem neuesten Stand ist, wenn es sowohl Inserts als auch Reloads gibt. Zum Beispiel wenn die Änderung wie folgt aussieht:

%Vor%

... dann stürzt meine App in performBatchUpdates mit Ausnahme ab:

%Vor%

Hier ist der Code von performBatchUpdates, den ich direkt aus der Apple-Dokumentation (!) kopiert habe, also sehe ich keinen Grund, warum changeIndexPaths index 31 enthält, da vor den Einfügungen der count = 31:

ist %Vor%     
xaphod 04.12.2014, 09:10
quelle

1 Antwort

3

Re: Update 3

Ungeachtet dessen, was der Beispielcode sagt, kann "changedIndexes" nicht in performBatchUpdates wie diesem verwendet werden.

Die Indizes PHFetchResultChangeDetails.changedIndexes sind relativ zum ursprünglichen Abrufergebnis nachdem die Indizes in removedIndexes entfernt wurden und nach werden die neuen Indizes in insertedIndexes hinzugefügt.

Die UITableView- und UICollectionView-APIs erfordern jedoch, dass reloadItems * -Methoden, wenn sie in einer Stapelaktualisierung aufgerufen werden, Indizes von vor anderen Änderungen haben.

Um diesen Aufruf zu beheben, laden und verschieben Sie Einträge außerhalb von Batch-Aktualisierungen, z. B .:

%Vor%     
Scott James Remnant 10.06.2015 15:26
quelle

Tags und Links