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

Mı 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.