'Verwendung eines nicht aufgelösten Bezeichners' in Swift


92

Also habe ich eine App erstellt und alles hat super funktioniert. Aber heute habe ich wie üblich eine neue Klasse erstellt und aus irgendeinem Grund kann ich in dieser Klasse nicht von anderen Klassen auf öffentliche / globale Variablen zugreifen. Alle anderen Klassen können, aber jetzt, wenn ich versuche, eine neue Klasse zu machen, kann ich nicht. Wie würde das behoben werden?

Ich benutze Swift und Xcode 6.

Arbeiterklasse:

import UIKit
import Foundation
import Parse
import CoreData

var signedIn = true

class ViewController: UIViewController {

Neue Klasse:

import UIKit

class NewClass: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        signedIn = false

}

Aber weiter signedIn = false

Ich bekomme den Fehler:

Verwendung der ungelösten Kennung "signiert"


und ja, ich habe diese Klasse mehrmals gelöscht und neu erstellt
Apple Geek

Bitte zeigen Sie Ihren Code, der sowohl funktioniert als auch nicht funktioniert.
Wez

Können Sie die Version von XCode / Swift angeben, die Sie verwenden (ob Beta oder nicht)?
Lchamp

@ Ichamp Xcode 6.1 nicht Beta.
Apple Geek

1
Ist das Ihr vollständiger Code? Aufgrund Ihrer Einrückung sieht es so aus, als ob Ihnen }am Ende IhresviewDidLoad()
Wez

Antworten:


296

Ein mögliches Problem ist, dass Ihre neue Klasse ein anderes Ziel oder andere Ziele als die andere hat.

Zum Beispiel könnte es ein Testziel haben, während das andere dies nicht tut. Für diesen speziellen Fall müssen Sie alle Ihre Klassen in das Testziel aufnehmen oder keine von ihnen.

Ziele


Wenn sich die Klasse in einem anderen Ziel befindet, stellen Sie sicher, dass Sie sie über Ihre schnelle Datei importieren
Medhi

2
hehe, das war ein problem. Ich habe vergessen, ein Ziel für den Unterricht einzurichten. Tnx :)
tBug

Oh Mann, ich habe ein paar Stunden damit verbracht, dieses Problem zu lösen. So eine blöde Fehlermeldung. Auch Syntaxfehler ist besser!
Turing getestet

yup .. es wurde nicht in ein Ziel für ein Testprojekt gesetzt !! danke
reidisaki

1
Meins war in, aber ich habe es einfach deaktiviert und dann erneut überprüft, wodurch dies behoben wurde UND mein Autocomplete / Intellisense zurückkam!
Stephen J

6

'Verwendung des nicht aufgelösten Bezeichners' in Swift kann auch passieren, wenn Sie vergessen haben, eine Bibliothek zu importieren. Zum Beispiel habe ich den Fehler: Geben Sie hier die Bildbeschreibung ein

In dem habe ich das vergessen UIKit

UIKit importieren


1
Import AVFoundation
Jenita _Alice4Real

4

Manchmal ist der Compiler verwirrt über die Syntax in Ihrer Klasse. Dies passiert häufig, wenn Sie die Quelle von einem anderen Ort einfügen.

Versuchen Sie, die "ungelöste" Quelldatei auf das Nötigste zu reduzieren, zu reinigen und zu erstellen. Sobald es erfolgreich erstellt wurde, fügen Sie Ihrer Klasse die gesamte Komplexität zurück.

Dies hat es für mich verschwinden lassen, als das Neustarten von Xcode nicht funktioniert hat.


4

Ein anderer Ort, an dem ich diesen Fehler gesehen habe, ist, wenn Ihr Projekt mehrere Ziele UND mehrere Überbrückungsheader hat . Wenn es sich um eine gemeinsam genutzte Klasse handelt, stellen Sie sicher, dass Sie die Ressource allen Bridging-Headern hinzufügen.

Ein guter Tipp ist, im linken Issue Navigator-Bereich nachzuschauen. Das Stammobjekt zeigt das Ziel an, das die Beschwerde ausstellt.


3

Bei mir ist dieser Fehler aufgetreten, weil ich versucht habe, eine verschachtelte Funktion aufzurufen . Das einzige, was ich tun musste, um es reparieren zu lassen, war, die Funktion in einen Bereich zu bringen , in dem sie sichtbar war.


Meinen Sie mit "die Funktion an einen Ort bringen, an dem sie sichtbar war" als öffentlich markieren?
Barry Jones

Nein. Nur die Funktion in einen anderen Bereich verschieben / ziehen, dh unter den Bereich der Klasse
Honey

2

In meinem Fall hatte ich eine Object-C-Datei, die sich ebenfalls in derselben Zielmitgliedschaft befand. Ich habe das Problem behoben, indem ich eine #import "YourObjectCFileHeader.h"Datei hinzugefügt habeBridging-Header.h


2

Einmal hatte ich dieses Problem nach dem Umbenennen einer Datei. Ich habe die Datei in Xcode umbenannt, aber danach konnte Xcode die Funktion in der Datei nicht finden. Selbst eine saubere Neuerstellung hat das Problem nicht behoben, aber das Schließen und anschließende erneute Öffnen des Projekts hat den Build zum Laufen gebracht.


1

Weil du es nicht deklariert hast. Wenn Sie eine Variable einer anderen Klasse verwenden möchten, müssen Sie diese verwenden

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var DestViewController : ViewController = segue.destinationViewController as ViewController
    DestViewController.signedIn = false
}

Sie müssen diesen Code am Ende des NewClass-Codes einfügen


Ja, aber ich habe andere Klassen benutzt und sie haben ohne das gut funktioniert. Es ist nur, wenn ich diese neue Klasse mache.
Apple Geek

2
Dies funktioniert nicht, er hat die signierteIn-Variable im globalen Bereich deklariert, nicht in seiner Klasse.
Sam

1

Dein NewClassErbe von UIViewController. Sie erklärt signedInin ViewController. Wenn Sie NewClassdiese Variable identifizieren möchten , muss sie in einer Klasse deklariert werden, von der Sie NewClasserben.


1

Ich habe diesen Fehler für Mantle Framework in meinem Objective-Swift-Projekt erhalten. Was ich versucht habe ist,

  1. Überprüfen Sie, ob in der Datei Bridging-Header.h ein Import vorhanden ist
  2. Ändern Sie die Zielmitgliedschaft für Framework in der Datei Mantle.h wie im folgenden Screenshot gezeigt.

Wenn Sie zwischen der privaten Mitgliedschaft wechseln, erstellen Sie zuerst das Projekt und erhalten Fehler. Erstellen Sie dann das Projekt mit Public Membership für alle Frameworks, die für die Datei Mantle.h angezeigt wurden. Sie müssen Erfolg haben.

Es ist nur ein Fehler beim Erstellen mit mehreren Frameworks im Objective-C Swift-Projekt.

Geben Sie hier die Bildbeschreibung ein


0

Wenn es sich um eine von Ihnen erstellte Klasse handelt, stellen Sie sicher, dass die Klasse nicht verschachtelt ist.

Fe

A. schnell

class A {

   class ARelated {

   }
}

Der Aufruf var b = ARelated()gibt 'Verwendung der ungelösten Kennung: ARelated'.

Du kannst entweder:

1) Trennen Sie die Klassen, falls gewünscht, in derselben Datei:

A. schnell

class A {

}

class ARelated {

}

2) Behalten Sie dieselbe Struktur bei und verwenden Sie die einschließende Klasse, um zur Unterklasse zu gelangen:

var b = A.ARelated


0

Ich habe einen dummen Fehler gemacht. Ich habe vergessen, die Klasse beim Aktualisieren des Codes im Cocoapod-Arbeitsbereich als öffentlich oder offen zu erwähnen.

Bitte überprüfen Sie, ob der Zugang erfolgt, wenn Sie in einem separaten Arbeitsbereich arbeiten.


0

Sie haben vergessen, die Variable zu deklarieren. Einfach varvorsignedIn = false


Ich würde annehmen, dass dies nur ein Tippfehler im veröffentlichten Code ist (zusammen mit der fehlenden schließenden Klammer am viewDidLoad.
Shim

0

Mein Problem bestand darin, mein Programm mit demselben Namen wie einen seiner Cocoapods aufzurufen. Es verursachte einen Konflikt. Lösung: Erstellen Sie ein Programm mit einem anderen Namen.


0

Dies bezieht sich nicht direkt auf Ihr Codebeispiel, sondern im Allgemeinen auf den Fehler. Ich schreibe es hier, weil Google diesen Fehler auf diese Frage weiterleitet, sodass es für die anderen Entwickler nützlich sein kann.


Ein weiterer Anwendungsfall, bei dem ein solcher Fehler auftreten kann, ist das Hinzufügen eines Selektors zur Methode in einer anderen Klasse, z.

private class MockTextFieldTarget {
private(set) var didCallDoneAction = false
    @objc func doneActionHandler() {
        didCallDoneAction = true
    }
}

Und dann in einer anderen Klasse:

final class UITextFieldTests: XCTestCase {
    func testDummyCode() {
        let mockTarget = MockTextFieldTarget()
        UIBarButtonItem(barButtonSystemItem: .cancel, target: mockTarget, action: MockTextFieldTarget.doneActionHandler)
        // ... do something ...
    }
}

Wenn in der letzten Zeile würden Sie rufen Sie einfach #selector(cancelActionHandler)statt #selector(MockTextFieldTarget.cancelActionHandler), würden Sie bekommen

Verwendung einer ungelösten Kennung

Error.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.