2012-08-28 7 views
5

Ich habe ein Projekt zu ARC refaktoriert. Es sieht gut aus, aber es gibt ein Objekt, das das Benachrichtigungscenter verwendet. Ich habe den Beobachter in einer benutzerdefinierten Dealloc-Methode entfernt. Das hat im Nicht-ARC-Projekt gut funktioniert. Es funktioniert auch in ARC, aber ich bekomme eine verrückte Warnung: "Methode möglicherweise einen [Super Dealloc] Anruf fehlt." In einem ARC-Projekt wird es automatisch für mich erledigt, wenn die Methode endet. Noch besser: Ich darf es nicht in ARC-Projekten nennen! Das muss ein XCode-Bug sein, oder? Hier ist mein Code:"Missing [Super Dealloc]" Warnung in einem ARC-Projekt

- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    // [super dealloc]; will be called automatically 
} 

Ich möchte immer Code schreiben, der Warnungen nicht wirft. Gibt es einen Weg um das gelbe Ausrufezeichen?

+0

Es sollte jede Warnung nicht, wie Sie vermutet. Bist du sicher, dass du ARC richtig abgeschaltet hast? – DrummerB

+0

Ich habe ARC eingeschaltet! Ich habe das Menü Bearbeiten/Refactor/In Objective-C ARC konvertieren ... verwendet. –

+5

Stellen Sie sicher, dass die spezifische Implementierungsdatei nicht ohne ARC-Unterstützung erstellt wird - überprüfen Sie Build-Phasen-> Quellen für diesen Zweck kompilieren. – Till

Antwort

10

Setzen Sie die folgenden Zeilen in Ihre dealloc Verfahren sicherzustellen, dass es mit ARC kompiliert wird aktiviert:

#if ! __has_feature(objc_arc) 
#error "ARC is off" 
#endif 

Wenn Sie den Compiler-Fehler beim Erstellen, Sie sind sicher, dass ARC ausgeschaltet ist, und haben suchen aus dem Grund. Es ist wahrscheinlich in Pro-Build-Einstellungen in Ihrem Ziel.

+0

OK, hier ist die Antwort auf dieses Rätsel: Das Projekt hat zwei Ziele und das Refactoring änderte nur das Flag "Objective-C Automatic Reference Counting" in den Build-Einstellungen eines Ziels auf YES. Der andere warnte diese Warnung. Ich habe es selbst auf YES geschaltet, und jetzt funktioniert es. Danke, Leute! –

+1

Auch ich habe gerade festgestellt, dass wenn Sie ARC für das Projekt aktivieren, während Sie das Ziel anzeigen, das Ziel weiterhin auf NO festgelegt wird. Sie müssen ARC für jedes Ziel einzeln aktivieren. –

0

"Haben Sie versucht, es aus- und wieder einzuschalten?"

Dies ist eine dumme Antwort, aber das Ziel Reinigen und Neustart Xcode dieses sehr irritierend Verhalten

  • Menü> Produkt> Sauber
  • Menü> Produkt> (drücken Sie für mich gelöst die alt-Taste) Reinprojektordner
  • Neustart Xcode

Danach bekam ich weitere ARC-bezogene Warnungen, also war Xcode nicht vollständig in ARC konvertiert. Jetzt ist die Warnung weg und alles funktioniert gut.

1

Ich habe diese Warnung durch folgende Schritte gelöst:

  1. Click Ziel (<yourapp>.xcodeproj), in dem die Datei (<classname>.m) Klasse über Warnung
  2. Select TARGET >>Build-Phasen zeigt >>Compile Quellen
  3. Suche Datei
  4. hinzufügen Compiler-Flags-fobjc-arc

Dies ist sieht aus wie unten

enter image description here