Warum zeigt eine IBOutletCollection auf statische Zellen vom Storyboard, die null zurückgibt?

8

Ich habe das im Code definiert:

%Vor%

und synthetisiert. Ich habe absolut sichergestellt, dass dieser Controller im Storyboard verwendet wird, und drei Zellen an diese Sammlung angeschlossen.

Als nächstes habe ich im Methodenaufruf didSelectRowAtIndexPath: diesen Code hinzugefügt, wobei NSLog zum Debuggen hinzugefügt wurde:

%Vor%

Die Ausgabe ist dies:

%Vor%

Und natürlich, Verhalten erwartet nicht passieren.

Irgendwelche Ideen, warum das passiert? Ich habe sichergestellt, dass ich statische Zellen verwende und keine dynamischen Prototypen. Als Randbemerkung sind diese drei Zellen auch mit eigenen (funktionierenden) IBOutlets verbunden.

Danke,

    
Alex Gosselin 24.02.2012, 22:50
quelle

2 Antworten

33

Ich fand die Antwort, indem ich Änderungen vornahm, die zu der Zeit für mich keinen Sinn ergaben. Ich habe die Eigenschaft von weak in strong geändert und es hat funktioniert.

Warum ich (schwach) an erster Stelle hatte:

Weil ich nicht wollte, dass die Zuordnung aufgehoben wird, wenn sich die Ansicht aufgrund von Speicherwarnungen / etc entlädt.

Warum dieses Denken falsch war:

Weil eine IBOutletCollection eine Instanz von NSSet oder NSArray ist. Das NSSet / NSArray wird von der Ansicht nicht beibehalten, da es nicht selbst eine Unteransicht ist. Mit einem IBOutlet ist eine schwache Eigenschaft in Ordnung, mit einer IBOutletCollection wird eine strong Eigenschaft benötigt, andernfalls ist der Referenzzähler sofort Null und es wird freigegeben.

Ich lasse das hier in der Hoffnung, dass es jemand anderem hilft.

    
Alex Gosselin 27.02.2012 22:47
quelle
3

Ich würde sagen, dass der Wert (null) eine Konsequenz des Freigebens von Objekten ist, da ARC davon ausgegangen ist, dass das Objekt nicht von irgendjemandem referenziert wird und den Wert auf null setzt und es irgendwann freigibt.

    
vedrano 21.02.2013 17:47
quelle

Tags und Links