2013-02-26 16 views
10

oluştururken "nesnelerden nil nesneyi eklemek girişimi [1]" özelleştirme o başlık aşağıdaki kodu kullanarak nitelikleri var: zaman, AncakiOS: Özel bir gezinme çubuğu sınıf oluşturup ediyorum sözlüğü

self.titleTextAttributes = @{ UITextAttributeFont: bariol, 
           UITextAttributeTextColor: [UIColor whiteColor] 
          }; 

Ben kod çalıştırmasına, aşağıdaki hata iletisini döndürür:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]' 

ben kullanan iOS 6.

cevap

6

değişmezleri parametreleri Xcode 4.6 kullanıyorum ve bir cihazda çalıştırıyorum (değerler ve anahtarları senin sözlük) nil olmamalıdır.

Daha az sıkı olan bir kurucuyu tercih ediyorsanız, bunun yerine +[NSDictionary dictionaryWithObjectsAndKeys:] kullanmayı düşünebilirsiniz.

+11

Bu daha az katı değil, yalnızca bir anahtarın beklendiği yerde bir 'nil' bulunması durumunda argümanların durduğunu düşünüyor. Özellikle, bir 'nil' nesnesini geçirirseniz, aynı istisnayı alırsınız. –

+0

@KevinBallard saçmalık. [NSDictionary dictionaryWithObjectsAndKeys: @ "a", @ "a", nil, @ "b", nil]; ilk nil nesne argümanında okumayı durdurur. – justin

+0

Maalesef anahtar dediğimde nesne kastettim (darn usulü yöntem). Bir 'nil' nesnesini ve 'nil' sentinelini ayırt edemez. Bir anahtar için 'nil 'kullanmayı deneyin ve ne demek istediğimi görün:' [NSDictionary dictionaryWithObjectsAndKeys: @ "anObj", @ "aKey", @ "anotherObj", nil, nil] '. –

9

nesnesinin nil olduğu gibi geliyor. Bir sözlükte nil depolayamazsınız.

Düzenleme: Aslında

, bu kodun doğru çizgi olduğundan emin misin? Sizin hata @[] literal, bir @{} literal değil bir sorun olduğunu öneren, NSPlaceholderArray hata referansları.

+0

@justin: 'dictionaryWithObjects: forKeys: count:' 'NSArray's kullanmaz. C dizileri kullanır. –

+0

whoops - nonsense :), NSArrays'in sözlüğünü (veya başka bir kurucu çağırmak), yani istisna mesajını oluşturma sürecinde oluşturulduğu hala mümkündür. – justin

+0

@justin: Bir “NSDictionary” değişmezi, “NSArray” aralığını oluşturmaz. Yani -setTitleTextAttributes: 'korkak bir şey yapmıyorsa, durum böyle değil. –

3

Bu hata başka bir yerde görünüyor. '1' nesnesindeki bir dizi hatasına işaret ediyor. Senin durumunda bir sözlük var ve '1' asla sıfır olmayacak olan UITextAttributeTextColor: [UIColor whiteColor].

+7

evet, istisna mesajında ​​[] 'u doğrulamak isteyen kişiler için, başarısız (nil) nesnesinin 0 dizinli dizi ofseti. Test edilmiş: NSString * str = nil; NSDictionary * foo = @ {NSFontAttributeName: str, NSForegroundColorAttributeName: @ "booboo"}; – robm

+1

@robm BOOM! Güzel. – Benjohn

İlgili konular