Ich habe eine Unterklasse von UICollectionViewCell
. Die Zelle wird visuell im Storyboard mit vielen Komponenten entworfen und diese Komponenten werden mithilfe des Storyboards an die Variablen in der Swift-Unterklasse gebunden.
Die Swift-Klasse bietet nur eine Logik zum Auffüllen der Komponenten aus Daten, die von der Datenquelle abgerufen wurden.
Zum Beispiel:
%Vor%Die Datenquelle macht das Übliche:
%Vor%Ich habe ursprünglich nur Decodierungs- / Codierungsmethoden implementiert, die eine "nicht implementierte" Assertion enthalten, aber es wurde offensichtlich, dass das Framework gelegentlich die Klasse codierte und decodierte. Ich habe Dummy-Enkodierungs- / Dekodierungsmethoden implementiert, ohne die Komponenten zu speichern, was zu vorhersehbaren Problemen mit Nullwerten führte, wenn auf die Komponenten zugegriffen wurde.
So scheint es, dass ich entweder die Codierung und Decodierung aller Steuerelemente in der Unterklasse UICollectionViewCell
eins nach dem anderen implementieren muss, oder ich muss einen besseren Weg finden.
Es scheint eine Zeitverschwendung, da ich den Inhalt der Komponenten nicht wirklich brauche (ich glaube nicht), da sie sowieso nur von der Unterklasse wiederverwendet werden: Ich überschreibe die Komponenteninhalte werden Werte aus der Datenquelle.
Offensichtlich sind alle Steuerelemente im Storyboard definiert. Ich könnte sie manuell aus dem Storyboard in der init-Methode abrufen, aber das scheint ebenso mühsam und macht die grafische Verknüpfung der Steuerelemente und Variablen überflüssig.
Gibt es einen besseren Weg?
Kann ich einfach "Verbindungen wiederherstellen" oder etwas Ähnliches sagen?
BEARBEITEN:
Irgendwo zwischen dem Posten der Frage und dem Hinzufügen der Bounty hörte das Problem auf. Ich bemerke jetzt, dass die Methode encode meiner Komponenten nicht aufgerufen wird. Aus irgendeinem Grund entschied sich der Rahmen dafür, meine Objekte zu serialisieren und zu deserialisieren, aber jetzt ist es nicht so. Daher tritt das Problem nicht auf und ich kann keine Stack-Trace liefern.
Es ist vorstellbar, dass ein Update auf XCode dieses Problem behoben hat, oder es könnte etwas anderes sein.
Ich bin natürlich immer noch besorgt, dass da irgendwo ein Virus lauert.
Sie sollten die Encodierung / Decodierung für keine der im Storyboard angelegten und verbundenen Steuerelemente implementieren müssen. Dies wird zur Laufzeit erledigt und Sie erhalten nach dem collectionView.dequeueReusableCellWithReuseIdentifier
eine Zelle zurück, solange alles andere korrekt mit den gebrauchsfertigen UI-Komponenten verbunden ist. Die Dinge zu überprüfen sind:
Sobald Sie sichergestellt haben, dass dies richtig ist, versuchen Sie, die Komponenten auszudrucken, um zu prüfen, ob sie noch immer null sind, und einen einfachen Text einzufügen, um alle dataSource-Probleme zu beseitigen:
%Vor%Tags und Links ios uicollectionview uicollectionviewcell encoding reuseidentifier