2011-08-01 51 views
5

Sabit bir NSString değerini temsil eden bir makro nasıl oluşturulur?NSString makrosu nasıl oluşturulur?

#define LEVELTYPEGLASS @"Glass" 

şey kaçmak gerekir mi: Xcode 4 tanımlarken ben uyarıları "Çok karakter karakter sabiti" ve "onun tipi için Karakter sabiti çok uzun" alıyorum?

+1

Doğru. Tam olarak nasıl kullanıyorsunuz? – sidyll

+0

Benim için iyi çalışıyor. – iandotkelly

+0

Yazımınızı kontrol edin, eğer '@' char varsa çift tırnak işareti kullanın. Muhtemelen yazım hatası yapabilir veya bu kodu nereye koyacağınızı söyleyin –

cevap

3

Dize sabitleri için tanım kullanmaktan kaçının. Böyle başlık dosyasında extern olarak tanımlayın:

extern NSString * const MYLevelTypeGlass; 

Ve onları herhangi uygulama dosyasında uygulamak: Bu tip bir kaç daha fazla karakter verir

NSString * const MYLevelTypeGlass = @"Glass"; 

, ama daha iyi yazarak gibi faydalar tahsis ekler Xcode için, garantili nesne kimliği (çoğaltılmış dizeler yok). Apple böyle yapar, eğer onlar için yeterince iyi olursa, sizin için iyi olmalı.

+0

Hm'de içe aktarılıyor, çözüm çalışma kurallarını biraz frenliyor :(Şu anda, tüm makrolarım tüm özel sınıflarıma otomatik olarak eklenen bir makro başlık dosyasında yer alıyor – Centurion

+0

Neden bunu yapmak için bir tanım kullanmaktan kaçınmamız gerektiğini açıklıyoruz: Sorgulama değil, sadece meraklı: – iandotkelly

+0

Xcode ve derleyici, daha iyi tür işleme (örneğin yeniden düzenleme için) ve eşitlik elde ederler. = MYLevelTypeGlass' kodunuzda ve güvenlidir – PeyloW

1

PeyloW tarafından önerilen çözüm mükemmeldir. Ama sadece, "Foundation/Foundation.h" numaralı #import dosyasını ekledikten sonra çözüme ulaştığımı belirtmek isterim.

#import "Foundation/Foundation.h" 

extern NSString * const LEVELTYPEGLASS; 
#define IMAGECOUNT 5 
... 

Ardından, uygulama dosyası gibi görünüyor: gibi yani başlık dosyası Constants.h görünmelidir

#import "Constants.h" 

NSString * const LEVELTYPEGLASS = @"Glass"; 

Ve sen -Prefix içinde içe aktarmaktır projeyle tam o dahil etmek gerekirse .pch dosyası: bu durumda

#import "Constants.h" 

, tüm makro tanımları Constants.h başlık dosyasında bulunduğu ve bazı NSString sabitleri Constants.m uygulama dosyasında bulunur. Yine, PeyloW'ye teşekkürler :)