SORU
15 NİSAN 2009, ÇARŞAMBA


NSUserDefaults için anahtar olarak sabit bir NSString kullanarak

NSUSerDefaults kullanıcı tercihlerini saklamak için kullanıyorum. Sabit tuşları ayarı iyi bir fikir olduğunu bir yerde okuduğumu hatırlıyorum ve katılıyorum. Aşağıdaki kodu ben şu anda ne var:

[[NSUserDefaults standardUserDefaults]
        setObject:[NSNumber numberWithInt:polygon.numberOfSides] 
           forKey:@"polygonNumberOfSides"];

Bu değişen çalıştım:

@implementation Controller

NSString const *kPolygonNumberOfSides = @"polygonNumberOfSides";

-(void)savePolygonInfo {
    [[NSUserDefaults standardUserDefaults]
            setObject:[NSNumber numberWithInt:polygon.numberOfSides] 
               forKey:kPolygonNumberOfSides];
}

Bu işe, ancak ürettiği "warning: passing argument 1 of 'objectForKey:' discards qualifiers from pointer target type". Benim kod derleyici uyarılarını uzak tutmak istiyordum. Bu uyarıyı nasıl düzeltebilirim?

CEVAP
15 NİSAN 2009, ÇARŞAMBA


Kullanmanız gereken:

NSString * const kPolygonNumberOfSides = @"..."; // const pointer

yerine:

NSString const * kPolygonNumberOfSides = @"..."; // pointer to const

Birinci, ikinci, sürekli NSString nesnesi için bir işaretçi ise NSString bir nesne sabit bir işaretçi.

İnce bir fark vardır. Derleyici uyarı setObject:forKey: aşağıdaki gibi beyan için olur

- (void)setObject:(id)value forKey:(NSString *)defaultName;

defaultName 14 ** türü olarak tartışmayı bekliyor. Bunun yerine sabit bir işaretçi olarak geçerken, bu farklı bir şey verdin.

Güncelleme:Bu sabitler ise sadece tek bir dosya içinde kullanılması için gidiyoruz eğer static olarak tanımlanması gerektiğini hatırlatmak istiyorum. Ben şunu diyorum, çünkü ben koşarak bu sorunu kendi kendime: eğer onlara bildirmek gibi statik, daha sonra mevcut genel ad alanında ve kullanabilir bir değişken ile aynı aynı adda başka bir dosya. daha fazla bilgi için Constants in Objective-C bkz. Örnekle açıklamak için, bu şu anda sadece .m bir dosyanın içinde kullanmanız gereken tuşlar için kullanılır:

static NSString * const kSomeLabel = @"...";

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brandon McCrary

    Brandon McCr

    15 Ocak 2012
  • DONFANTASTICKYPESS

    DONFANTASTIC

    1 Temmuz 2007
  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009