NSDictionary değişkeninin içeriğini Xcode hata ayıklayıcıda nasıl görüntüleyebilirim?


85

NSDictionary değişkeninin anahtar / değer çiftlerini Xcode hata ayıklayıcı aracılığıyla görüntülemenin bir yolu var mı? Değişken penceresinde tam olarak genişletildiğinde bilginin kapsamı şu şekildedir:

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720

Bana sözlüğün her bir öğesini göstermesini bekliyordum (bir dizi değişkenine benzer).

Yanıtlar:


140

Gdb penceresinde ponesneyi incelemek için kullanabilirsiniz .

verilen:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];

nesneler eklendikten sonra bir kesme noktası belirleyerek sözlükte ne olduğunu inceleyebilirsiniz

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}

Elbette bunlar NSStringgüzel yazdırılan nesnelerdir. Diğer karmaşık nesnelerle YMMV.


7
Selam! Gdb nedir? Po nedir? Anladığından emin değilim ... Yardımın için teşekkürler! :)
Martin

1
Tamam, GDB'nin GNU hata ayıklayıcı anlamına geldiğini ve aslında Xcode'un hata ayıklayıcı penceresi olduğunu öğrendim. Şimdi po'nun ne olduğunu bulmam gerekiyor
Martin

18
TAMAM! Yani gdb aslında Konsolda komutları girebileceğiniz bir bilgi istemidir. "Po nesne_adı" yazarak, konsolda yazdırılan nesne içeriğini elde ettiniz.
Martin

7
po, baskı nesnesinin takma adıdır
Brad Cupit

Olağanüstü! PHP'de "echo var_dump ()" veya "print_r ()" ile eşdeğerdir.
mpemburn

30

Herhangi bir nesne (ObjC veya Core Foundation) değişkenine sağ tıklayabilir ve "Tanımlamayı Konsola Yazdır" ı (ayrıca Çalıştır-> Değişkenler Görünümünde) seçebilirsiniz. Bu, sonucu -debugDescriptionvarsayılan olarak çağıran obejct yöntemini yazdırır -description. Ne yazık ki, NSDictionarygenellikle umursamadığınız bir dizi dahili veri üretmek için bunu geçersiz kılar, bu nedenle bu özel durumda craigb'in çözümü daha iyidir.

Görüntülenen anahtarlar ve değerler ayrıca -description , bu nedenle koleksiyonlardaki ve başka yerlerdeki nesneleriniz hakkında yararlı bilgiler istiyorsanız, geçersiz kılma şarttır -description. Bunu genellikle varsayılan NSObjectuygulamanın formatına uyması için bu satırlar boyunca uygularım:

- (NSString *) açıklaması
{
    return [NSString stringWithFormat: @ "<% @% p> {foo:% @}", [self class], self, [self foo]];
}

6

CFShow () kullanabilirsiniz

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);

Çıktıda göreceksiniz

{
  bar = foo;
  buz = fiz;
}

3

XCode 4.6 size yardımcı olabilecek aşağıdaki işlevselliği ekledi

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger

Artık, konsoldaki tüm nesneyi yazdırmak zorunda kalmadan bu nesne türlerini inceleyebilirsiniz. Zevk almak!

Kaynak: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html


Bu benim için hatalı - sadece NSDictionary'nin bir bölümünü gösterir
Paul Slocum

1

Kararınıza tıklayın, ardından küçük "i" simgesine tıklayın, işi yapmalıdır :-) Xcode5, bir diktenin değerini görüntüle


1

Bunları modern XCode'da bir kesme noktası eyleminde yazdırmak isterseniz (evet, orijinal gönderiden 10 yıl sonrayım!) "Günlük Mesajı" eyleminde aşağıdaki kesme noktası ifadesini kullanın:

@ myDictionary.description @

Aşağıda, değişken olayının bir NSString olduğu ve contextData değişkeninin, içeriğini günlüğe kaydettiğim NSDictionary olduğu kesme noktası eylemimin bir ekran görüntüsü verilmiştir :


0

NSLog'u da kullanabilirsiniz .

Ayrıca Debug alanına veya xcode'a gidebilir, ardından bulup All Variables, Registers, Globals and Staticsdeğişkeninizi seçebilirsiniz. Üzerine sağ tıklayın. Sonra seçinPrint description of "...."

Umarım yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.