2009-10-21 11 views
5

sto ottenendo un messaggio di avviso su questa linea nel mio header, ma sto usando la variabile di classe nella mia implementazione (in entrambi i metodi di classe e metodi di istanza):Perché Xcode segnala un avviso "definito ma non utilizzato" per la mia variabile di classe?

#import <UIKit/UIKit.h> 

static NSMutableArray *classVar; // Xcode warning: 'classVar' defined but not used 

@interface MyViewController : UIViewController { 
+0

Avrete bisogno di includere più codice, in cui si usa ecc. – MarkPowell

+0

Puoi anche mostrare come lo stai usando nell'implementazione? – cdespinosa

+1

Rimuovere o utilizzare la variabile e l'avviso andrà via. – Steven

risposta

14

Questa variabile non è una variabile di classe/istanza. Ogni volta che il file di intestazione è incluso nel file .m, il compilatore crea una nuova variabile statica con ambito limitato al file che include questa intestazione. Se stai cercando di ottenere una variabile di livello di classe, sposta la dichiarazione all'inizio del rispettivo file .m.

+0

esempio qui: http://wiki.gonzofamily.com/a/NSNotification_usage – mattorb

3

aver messo le classVar al di fuori della definizione di interfaccia . Questo farà sì che il compilatore pensi di dichiarare una variabile globale e, poiché sembra che sia un file di intestazione (.h), verrà creato anche in tutti i file incluso questo file di intestazione. Suppongo che l'avvertimento arriva quando si compila un file diverso da MyViewController.m che include questo file di intestazione.

EDIT Il mio suggerimento è che si sposta il classVar nel file .m per MyViewController (miss-interpretare ciò che si dove dopo la prima)

+0

ma non è possibile utilizzarlo in altri m file. – malhal

6

Una variabile static ha lo scopo del file. Poiché Xcode non riesce a trovare la variabile utilizzata in quel file, vede una variabile non utilizzata. Se si desidera effettivamente che la variabile sia accessibile dall'intero programma, impostarla come dichiarazione extern e definirla nella propria implementazione. Se è destinato a essere utilizzato solo da quella classe, è sufficiente spostare la variabile statica nel file di implementazione.

0

Ecco il modo corretto di fare questo:

Nel .h

extern NSString *const DidAddRecordNotification; 

Nel .m

NSString *const DidAddRecordNotification = @"DidAddRecordNotification"; 
Problemi correlati