NSLog ile kullanmak için “toString ()” için Objective-C eşdeğeri nedir?


170

Özel sınıflarımda geçersiz kılabileceğim bir yöntem var mı?

      NSLog(@"%@", myObject) 

denirse, nesnemin alanlarını (veya önemli bulduğum her şeyi) basar? Sanırım Java'nın Objective-C eşdeğerini arıyorum toString().

Yanıtlar:


250

Şu şekilde descriptionbildirilen örnek yöntemidir:

- (NSString *)description

İşte örnek bir uygulama (grahamparks sayesinde):

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}

5
CoreData kullanıyorsanız, descriptionözelliğin ayrılmıştır ... ve yararlı hata ayıklama bilgileri sağlar! Bu durumda, kendi benzersiz yöntem adınızı bulmanız gerekir.
Nuthatch

debugDescriptionda saklıdır? Bence DebugDescriptionLLDB gibi bir hata ayıklayıcı tarafından kullanılması gerekiyor.
MaddTheSane

36

Bu ekle @implementationFotoğrafınızı sınıfının:

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}

24

NSObject öğesinin açıklama yöntemini geçersiz kılabilirsiniz:

- (NSString *)description

Günlük kaydı konusunda, bu blog yazısını Objective-C'de daha iyi giriş için tavsiye ederim .


4
Bu statik bir yöntem değil mi? Bunun sınıftan ziyade nesneler üzerinde çalışmasını istiyorum. Örneğin, "name" ve "author" alanlarıyla bir "Photo" sınıfım varsa, NSLog'un bu alanları nesneye atandıkları gibi yazdırmasını istiyorum.
George Armhold

2
Evet - iyi gördüm - Yanlış tuşa bastım. Yanıtlarımı kanıtlarken okurken açıkça daha fazla dikkat etmeliyim. Neyse ki birisi topa gözlerini
dikti

13

Kullanabileceğiniz iki işlev vardır.

- (NSString*)description

Nesnenizi IE için bir parametre olarak koyduğunuzda bu görüntülenir NSLog. Diğer açıklama işlevi:

- (NSString*)debugDescription

Bu po anInstanceOfYourClasshata ayıklama komut penceresinde yaptığınızda çağrılır . Sınıfınızın bir debugDescriptionişlevi yoksa , sadece descriptionçağrılacaktır.

Taban sınıfı Not olduğunu NSObjectgelmiş gelmez descriptionuygulanan, ancak oldukça çıplak kemikleri: sadece nesnenin adresini görüntüler. Bu nedenle description, özellikle descriptionkodunuzdaki yöntemi kullanırsanız, bilgi almak istediğiniz herhangi bir sınıfta uygulamanızı öneririm . Eğer kullanımını yaparsanız descriptionkodunuzda, sana uygulamak önermek debugDescriptionde yapım, hem de debugDescriptiondaha ayrıntılı.


1

Bu, mevcut sesleri çıkarır:

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
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.