No iOS, quando é hora de carregar algum tipo de recurso, como imagens, nib, etc … você tem que codificar o nome do recurso.
Essa “string mágica” é problemática em duas situações:
- Quando você escreve pela primeira vez porque você não tem nenhum tipo de preenchimento automático. (Aconteceu comigo várias vezes que não consigo entender por que uma imagem não aparece apenas para descobrir que digitei o nome errado)
- Quando você refatorar seu código. Isso é especialmente verdadeiro, no meu caso, para o bico.
Em relação ao primeiro problema, algo está acontecendo na comunidade: Patrick Hughes montou um [script python] ( http://www.cimgf.com/2013/01/29/down-with-magic-strings/ ( que gera um #define para cada imagem no projeto e no projeto rgen que tenta imitar o comportamento da classe de recurso R do Android .
O segundo problema me cria várias dores de cabeça, especialmente com os arquivos nib. Eu me considero um cara do refatorador, adoro melhorar meu código e o recurso Refator do Xcode é meu melhor amigo.
Os problemas começam quando você tem algum + [UINib nibWithNibName: bundle:] ou – [UIViewController initWithNibName: bundle:] com o nome nib codificado como um NSString e você altera o nome da classe do controlador ou da classe de visualização e o refatorador também automaticamente mude o nome da ponta.
Então, eu uso este pequeno truque para deixar o Xcode refatorar o nome da ponta em torno do meu código, em vez de codificar o nome da ponta como uma string, escrevo algo assim:
UINib *cellNib = [UINib nibWithNibName: NSStringFromClass([LBDocumentViewCell class])
bundle: nil];
Isso garante que, quando o Xcode refatorar meu código, ele também cuidará da alteração desse nome.