So stellen Sie Bindungen in UICollectionViewCell nach der Decodierung wieder her

8

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.

    
rghome 12.01.2016, 22:18
quelle

1 Antwort

2

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:

  1. Die Unterklasse wird im Abschnitt benutzerdefinierte Storyboard-Klassen
  2. angegeben
  3. Der reuseIdentifier ist so definiert, dass er mit der erwarteten Zeichenfolge
  4. übereinstimmt
  5. Alle IBOutlets sind verbunden und sollten auch die Verbindungen im Code neben den IBOutlet var-Zeilen anzeigen.

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%     
Dallas Johnson 25.01.2016 19:55
quelle