2012-09-11 9 views
14

Me encuentro perdiendo mucho tiempo tratando con la sangría automática de XCode, y tengo que preguntar si hay algo que tengo mal en mi configuración. Básicamente, si dedico tiempo sangría código dentro de un método, y luego copio todo ese método y lo pego, el método recién pegado no retiene ninguno de los espacios en blanco que apliqué al original ...¿por qué la sangría automática de Xcode es tan mala? y ¿cómo puedo hacerlo mejor?

Por ejemplo, aquí es una captura de pantalla donde el método superior sangré todos los objetos de una matriz para que se alineen correctamente ... Luego seleccioné todo el método, copié y pegué, y puedes ver que el método a continuación tiene toda la sangría en mal estado.

enter image description here

estoy usando Xcode 4.4.1, aquí están mis ajustes:

my indentation settings

+4

Cuando pegue, use Shift-Option-Command-V en lugar de Command-V y su formato se mantendrá. –

+0

Te encantará este truco: crea una línea de código dentro del alcance de una función. Asegúrate de que sea semi largo. Después de poner un {en la línea debajo de él, cerrarlo o no, no importará. Luego, coloca el cursor al final de la primera línea, presiona el espacio (o la pestaña), luego presiona enter. Solo me gusta reproducir ese error. Si no lo obtiene, agregue algunos caracteres más, pero no haga que la línea sea lo suficientemente larga como para pasar el nuevo ajuste de línea. Su cursor ahora aparecerá delante y debajo del {, pero el texto se muestra en el área derecha. Inofensivo, pero divertido, puedo reproducir en XCode 4 como un divertido truco de fiesta. –

Respuesta

0

funciona como está previsto.

…Objects: y forKeys: deben alinearse, ya que forman parte de la misma firma de método.

Podría ser más fácil para dar formato a su código si se utiliza el nuevo objeto de sintaxis literal:

- (int)minBrokenPieces { 
    NSDictionary *mapping = [NSDictionary dictionaryWithObjects:@[@"3", @"4", @"4", @"5", @"6", @"7", @"8"] 
                 forKeys:[Note types]]; 
    [(NSString *)mapping[self.note.type] integerValue]; 
} 

En cuanto al código en sí, parece un poco peligroso para definir estas constantes en un lugar y los tipos de notas en otra parte. Además, ¿por qué usar strings, cuando NSNumbers sería suficiente?

(Este código asume que esta función solo se llama desde un hilo).

- (int)minBrokenPieces { 
    static NSDictionary *mappings; 
    if (!mappings) { 
     mappings = @{ 
      noteType1 : @3, 
      noteType2 : @4, 
      noteType3 : @4, 
      noteType4 : @5, 
      noteType5 : @6, 
      noteType6 : @7, 
      noteType7 : @8, 
     }; 
    } 
    NSAssert(mappings[self.note.type] != nil, @"Used a note type for which there is no minBrokenPieces defined"); 
    return [mappings[self.note.type] intValue]; 
} 
Cuestiones relacionadas