2012-01-26 6 views
24

Come scrivere un metodo di descrizione appropriato per una classe?Come scrivere un metodo di descrizione appropriato per una classe?

ho implementato

- (NSString *)description { 
    NSString *descriptionString = [NSString stringWithFormat:@"Name: %@ \n Address: %@ \n", self.name, self.address]; 
    return descriptionString; 

} 

evrey cosa va bene se chiamo descrizione sul mio oggetto. Ma se ho un array di oggetti e chiamo descrizione su di esso ottengo:

"Nome: Alex \ n Indirizzo: qualche indirizzo \ n",

Quello che vorrei ottenere è

"Nome: Alex

indirizzo: qualche indirizzo"

+1

si dovrà ciclo sugli elementi e chiamare 'descrizione' su ciascuno. La descrizione dell'array è l'output formattato, che può cortocircuitare alcune cose come "\ n", per mantenere la formattazione coerente –

+1

vedere [http://stackoverflow.com/a/1828689/971401](http://stackoverflow.com/a/1828689/971.401). Le risposte possono probabilmente aiutarti. –

risposta

12

Scavo un po 'di più nei framework iOS e ho osservato che il comportamento predefinito della descrizione sdk di iOS non è di collocare "\ n", ma ";".

Esempio:

UIFont *font = [UIFont systemFontOfSize:18]; 
    NSLog(@"FontDescription:%@",[font description]); 

    NSMutableArray *fontsArray = [NSMutableArray arrayWithCapacity:0]; 
    for(int index = 0; index < 10; index++) { 
     [fontsArray addObject:font]; 
    } 
    NSLog(@"FontsArrayDescription:%@",[fontsArray description]); 

La put out:

FontDescription: font-family: "Helvetica"; font-weight: normal; stile font: normale; font-size: 18px

FontsArrayDescription :(

"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px", 
"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px", 
"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px", 
"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px", 
"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px",  
"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px", 
"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px", 
"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px", 
"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px", 
"<UICFFont: 0x6e2d8b0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 18px" 

)

Così ho deciso di utilizzare lo stesso approccio con la mia classe.

- (NSString *)description { 
    NSString *descriptionString = [NSString stringWithFormat:@"Name: %@; Address: %@;", self.name, self.address]; 
    return descriptionString; 

} 

E put out sarà:

"Nome: Alex; Indirizzo: alcuni indirizzi;"

Per oggetto esso stesso.

objecsArrayDescription :(

"Name:Alex; Address: some address;", 
"Name:Alex; Address: some address;", 
"Name:Alex; Address: some address;", 
"Name:Alex; Address: some address;", 
"Name:Alex; Address: some address;", 
"Name:Alex; Address: some address;", 
"Name:Alex; Address: some address;", 
"Name:Alex; Address: some address;", 
"Name:Alex; Address: some address;", 
"Name:Alex; Address: some address;" 

)

Per una matrice di oggetti.

18

Inoltre è possibile utilizzare un ritorno a capo \r che finirà in una nuova linea di troppo (anche in una descrizione NSArray)

+0

funziona, grazie mille –

+1

Ottima risposta! Anche se non riesco ancora a funzionare, così ho finito con "" (4 spazi). –

+0

Ha funzionato per me, grazie –