ARC Semantische Problem: Keine sichtbaren @Schnittstelle für die Klasse deklariert die selector
Ziemlich grundlegende Dinge, aber ich bin nicht in der Lage zu beheben, wo das problem ist. In meinem Projekt habe ich eine Klasse namens "TheFeedStore" mit folgenden zwei Methoden:
- (BOOL)hasItemBeenRead:(RSSItem *)item
{
............
}
- (void)markItemAsRead:(RSSItem *)item
{
.........
}
Ich bin mit der folgenden Methode der Klasse, so dass andere Klassen zugreifen kann, können diese Methoden verwenden:
+ (TheFeedStore *) sharedStore
{
static TheFeedStore *feedStore = nil;
if (!feedStore) {
feedStore = [[TheFeedStore alloc] init];
}
return feedStore;
}
In einem meiner anderen Klasse, kann ich leicht Zugang zu den oben genannten Methoden schreiben
if ([[TheFeedStore sharedStore] hasItemBeenRead:item])
oder
[[TheFeedStore sharedStore] markItemAsRead:entry];
Aber in einer anderen Klasse, wenn ich versuche, auf diese Methoden in einer ähnlichen Art und Weise, erhalte ich die Fehlermeldung "No visible @interface for 'TheFeedStore' erklärt der Selektor 'hasItemBeenRead:"
1) habe ich importiert TheFeedStore.h-Datei in die Klassen, ich bin
der Zugriff auf diese Methoden von TheFeedStore Klasse.2) ich habe etwa 10 mal und es ist kein Tippfehler.
3) Die Methoden, die ich bin, Zugriff auf sind auch deklariert in der header-Datei
TheFeedStore.h
UPDATE: Einfach zu checken, ich habe erklärt eine andere test-Methode in TheFeedStore.h, Gleiches Ergebnis, eine Klasse Zugriff auf die neu erstellte Methode, während die restlichen drei Klassen nicht.
UPDATE: ich habe versucht, die Schaffung von mehr Methoden in der TheFeedStore.h nur für die Behandlung dieses Problems. Die neuen Methoden sind auch nicht zugänglich, von den anderen Klassen. Aber wenn der Rückgabetyp dieser neuen Methoden ist (RSSChannel*), ist ein weiteres model-Klasse in meinem Projekt, als Sie zugänglich werden. Wenn Ihr Rückgabetyp ist im Gegensatz zu manchen anderen Klasse wie (void) und (BOOL) dann sind Sie nicht zugänglich. Hier ist mein TheFeedStore.h https://gist.github.com/jessicamoore112/5558473
#import
die Klasse in die Klasse, wo du immer diese Fehlermeldung?natürlich habe ich importiert die Klasse. Es erkennt nicht die Methoden, auch "sharedStore-Klasse" - Methode kommt in der AutoVervollständigen-Liste, wenn ich den Typ [[TheFeedStore sharedStore]
was haben Sie in TheFeedStore.h-Datei ? Haben Sie erklärt, diese Instanz-Methoden .h ?
ja, diese Methoden sind deklariert in der header-Datei als gut
Er wurde mit der Bestätigung, dass Sie nicht tun, dass, nicht was darauf hindeutet, dass Sie sollten.
InformationsquelleAutor AJ112 | 2013-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie gesagt, dass Sie mit der @ - Klasse statt #import in Ihren header-Dateien, die Methoden, die Sie versuchen, Zugriff deklariert werden header-Dateien und es gibt keine Tippfehler jeglicher Art.
In solchen Fällen in der Regel keine Körper Punkte zu diesem Thema, aber ich werde es trotzdem tun, weil ich angesichts solcher Fragen viele Male. Sie haben wahrscheinlich erzeugt viele Kopien von Ihrem Projekt zu arbeiten, auf jede Funktion und hält auch ein funktionierendes Projekt.
Wenn Sie dies tun, manchmal mit Xcode immer noch mit dem älteren Exemplare von wenigen Dateien. Das heißt, es ist noch mit der alten Kopie der TheFeedStore.h, wenn die Methoden, die Sie zugreifen möchten, wurden nicht erklärt.
Wie dieses problem zu lösen, ist sehr einfach. Gehen Sie zu der Datei, aus der Sie versuchen, Zugriff auf die Methoden und die Dateien, in denen diese Methoden deklariert.
In der Utilities Sektion auf der rechten Seite, überprüfen Sie den Speicherort und den vollständigen Pfad unter "Identität und Geben Sie" Bereich.
Prüfen Sie zunächst den Namen des Projekts, wenn es anders ist aus dem Projekt-Namen, an dem Sie arbeiten, das bedeutet, dass Xcode ist noch immer ziehen die alten Kopien der Dateien von der vorherigen revision Ihres Projekts. Sehen Sie die blauen Pfeile, wo der Projekt-name ist 13SampleMoreRequests in meinem Fall.
Falls dieser name dasselbe wie der name Ihres Projekts, dann wird meine Antwort Ihr problem nicht lösen. Wenn Ihre verschiedenen, Sie sollten die neue Kopien der Datei durch navigieren den neuen Speicherort mit der Zeichen das ist wies darauf hin, durch roten Pfeil.
Sobald Sie auf durchsuchen und verwenden Sie die neuen Dateien, Ihr problem wird gelöst werden, und Sie werden in der Lage sein, um Zugriff auf die Methoden. Wenn Sie immer noch nicht, kopieren Sie diese Dateien löschen aus dem Projekt und fügen Sie Sie wieder, und Sie werden nicht vor diesem problem.
Hoffe, das hilft!
InformationsquelleAutor Jessica
Zyklische Importe, z.B.
A.h
ImporteB.h
während auchB.h
ImporteA.h
ist das häufigste problem.In C, zyklische Importe nicht funktionieren und man die Importe werden automatisch ignoriert. Stellen Sie sicher, Sie sind nicht mit einem zyklischen import. Wenn Sie nicht, lösen Sie es (z.B. mittels forward-Deklaration).
Probleme beim Import kann auch leicht überprüft, wenn Sie generieren den preprocessed output (Sie finden es in einer der Xcode-Menüs).
Wenn ich die Vorverarbeitung die option Datei, der Fehler geht Weg und er zeigt mir eine lange Datei. Läuft das Programm wieder den Fehler bringt zurück
Vielleicht solltest du erst einmal lernen, wie Präprozessor, vor allem Importe & die Arbeit beinhaltet.
InformationsquelleAutor Sulthan
Das klingt vielleicht albern, aber ich habe ähnliche Fälle einmal in eine Weile, und manchmal einfach nur das beenden und starten von xcode hilft, es neigt dazu, stecken manchmal.
Auch, manchmal Reinigung der Projekt hilft.
'Ursache, die ich habe sehr ähnlich zu verkaufen singleton-code, und es funktioniert gut.
Vielleicht u hochladen können, die Teil des Projekts sind irgendwo so konnte ich einen Blick an ihm nehmen?
ich habe den code Hinzugefügt, der singleton-Klasse hier gist.github.com/jessicamoore112/5558473
Es sieht ok für mich, aber es sagt nicht viel. Ich würde lieber sehen, mehr code zu versuchen, diese, beiden .h und .m-Dateien von singleton und die Klassen, wo Sie es verwenden. Vielleicht kannst du hochladen, die Teil des Projekts sind, die nicht arbeiten oder sowas?
InformationsquelleAutor titicaca
Jungs, die ich jemals getroffen habe die genau gleichen Probleme. Nach einigem suchen auf SO und die Suchmaschine war ich in der Lage, es zu lösen.
In meinem Fall habe ich vier Dateien:
Mein Fehler war es, alle meine Methoden in der RadioStation.m und nur meine Variablen auf radioStation.h
Also, wenn ich importieren radioSation.h auf meiner ViewController.m und versuchen zu definieren, Methoden für die button-klicken Sie auf die app, die ist, wo die Probleme begannen.
Ich habe den Fehler/Warnungen "ARC Semantische Problem: Keine sichtbaren @Schnittstelle für die Klasse deklariert die Auswahl" jedes mal, wenn ich gebaut, oder lief die app simulator.
Meine Lösung war, zu gehen zurück an die RadioStation.h-Datei und einfach erklären, alle meine Methoden gibt.
Da Sie bereits definiert wurden auf der RadioStation.m ich war gut zu gehen.
So stellen Sie sicher, Sie haben richtig erklärt, Ihre Methoden auf die Datei, die importiert auf Ihrem viewControllers.
Hoffe, das hilft.
InformationsquelleAutor webWizard
In meinem Fall hatte ich einige sehr seltsame Pfad-Einträge in
(Ziele -> YOUR_APP_NAME -> Build-Einstellungen in "Suchpfade")
Ich Sie abgenommen und die Fehlermeldungen sind Weg.
InformationsquelleAutor Dirk