Ich benutze XCode6 Beta und probiere Swift aus. Wenn ich einige Einschränkungen für das automatische Layout in einen Ansichts-Controller einfüge, stürzt die App mit dem folgenden Fehler ab:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
81
Antworten:
Dieser Fehler wird angezeigt, weil Sie eine Einschränkung für ein IBOutlet festgelegt haben, das zur Laufzeit entfernt wird. Dies geschieht, wenn Sie die Einschränkung in Interface Builder als Platzhalter festlegen. Da die Einschränkung entfernt wird, wird beim Aufheben der Archivierung ein Fehler ausgegeben, der besagt, dass dies nicht möglich ist.
Es gibt zwei Möglichkeiten, dies zu korrigieren.
Methode 1
placeholder="YES"
.Methode 2
So sollte es aussehen:
Alternative
Angenommen, Sie möchten tatsächlich, dass die Einschränkung ein Platzhalter ist, müssen Sie alle referenzierenden Steckdosen entfernen. Wählen Sie dazu die Einschränkung aus, die Sie als Platzhalter verwenden möchten. Öffnen Sie dann den Verbindungsinspektor (die Schaltfläche ganz rechts, die wie folgt aussieht: (->)) und entfernen Sie alle Referenzierungssteckdosen, die möglicherweise für diese Einschränkung vorhanden sind.
quelle
Ich hatte gerade das gleiche Problem und das Folgende funktionierte für mich.
Ich habe eine funktionierende Version meiner App im App Store veröffentlicht und einige Tage später wieder daran gearbeitet, indem ich auf eine meiner Registerkarten im UITabBarController getippt habe, die mit dem Fehler abgestürzt ist:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
Ich hatte keine mir bekannten Platzhalter-Layout-Einschränkungen oder Einschränkungen für Outlets, die nicht definiert werden sollten.
Die Lösung für mich bestand darin, Größenklassen einfach auszuschalten und Größenklassendaten für das iPhone beizubehalten (App ist nur für iPhone). Dies muss alles gelöscht haben, was ich in den Größenklassen verpasst hatte. Ich möchte Größenklassen, also habe ich sie wieder aktiviert und die App hat einfach wieder funktioniert.
quelle
Dies ist möglicherweise nicht unbedingt ein Einschränkungsproblem. Für mich wurde dies dadurch verursacht, dass "Installiert" nicht für eine Größenklasse aktiviert wurde, die für mein Layout gilt (siehe hier)
quelle
Es gab einige Probleme bei der Verwendung von Größenklassen. Ich habe diese Option in den Storyboard-Eigenschaften deaktiviert und verwende nur das automatische Layout. Es war kein so großes Problem, da die App nur das iPhone ist.
quelle
Was mir letztendlich passiert ist, dass ich eine Unteransicht in Interface Builder ausgeschnitten habe, um sie in eine andere xib zu kopieren. Dadurch wurde die Unteransicht im ursprünglichen xib Interface Builder ausgegraut. Nach dem Entfernen der Unteransicht von ihrem ursprünglichen Ort (durch Auswählen und Löschen). Ich konnte den Fehler beseitigen.
quelle
Es gibt eine Option im Inspektorfenster, wenn Sie die XIB-Datei auswählen, die die Einschränkungen unter "Datei als Inspektor anzeigen" im Inspektor mit dem Namen "Autolayout verwenden" nicht verwendet.
quelle
Ich habe eine Änderung an einer Bildlaufansicht vorgenommen, damit die darin eingebetteten Auswahlsteuerelemente mit einer Lösung, die ich an anderer Stelle in Stackoverflow gefunden habe, ordnungsgemäß funktionieren. Mein neues Storyboard fügte diese Attribute einfach der Bildlaufansicht hinzu, was mir in Ordnung erschien.
delaysContentTouches="NO" canCancelContentTouches="NO"
Außerdem habe ich in meinem Storyboard in einer anderen Szene das folgende neue Fragment gesehen:
<variation key="default"> <mask key="subviews"> <exclude reference="86H-aM-wei"/> </mask> </variation>
Ich habe keine Ahnung, woher es kam. Zuerst ignorierte ich es, weil alles auf meiner Entwicklungsmaschine zu funktionieren schien. Aber als der Build als Release erstellt und getestet wurde, bekam ich den Absturz. Das Entfernen dieses falschen (?) Fragments hat den Absturz behoben und scheint nichts anderes zu beeinflussen.
quelle
Ich hatte dieses Problem, als ich eine Schaltfläche in einer benutzerdefinierten UICollectionViewCell hatte und einige ihrer Einschränkungen als IBOutlets für diese Klasse hatte. Ich habe die Schaltfläche von der Zelle in den übergeordneten Ansichts-Controller verschoben, und die IBOutlets wurden immer noch in der Zelle referenziert, waren jedoch in der Zelle nicht vorhanden, sodass alles in die Luft gesprengt wurde. Musste nur diese IBOutlets entfernen und alles hat wieder gut funktioniert!
quelle