Pergunta

Eu tenho outro problema no mesmo código ... estou recebendo este erro:

Método de inicialização -InitwithCharactersNocopy: Comprimento: FreeWhendone: Não pode ser enviado para um objeto abstrato da classe nsString_Regex: Crie uma instância concreta!

Mas eu não entendo o erro ou o que devo fazer ...

editar:

NSString *pageContent = [[NSString alloc] initWithData:pageContents encoding:NSASCIIStringEncoding];
NSString_RegEx *pContent = [[NSString_RegEx alloc] initWithString: pageContent];
Foi útil?

Solução

Você está vendo isso porque o NSString é um cluster de classe. Veja os documentos da Apple aqui para uma explicação geral e aqui Para notas especificamente sobre a subclassificação do NSString. Basicamente, o NSString é uma classe abstrata, sem método de armazenamento de caracteres, e os vários métodos -initwith… todos retornam diferentes subclasses concretas da NSString com base no método de inicialização. Normalmente, quando você está usando o NSString, isso é completamente transparente. No entanto, se você deseja subclasse o NSString, precisa pelo menos implementar os métodos básicos ( -comprimento e -CharacteratIndex :) além de qualquer método init que você deseja ter (além de, obviamente, ter uma maneira de armazenar os personagens da string ).

Se você deseja apenas adicionar funcionalidade à NSString, a subclasse geralmente não é necessária. Primeiro, você deve verificar se uma categoria, ou uma função operando em uma NSString, ou um método em uma classe que contém o NSString funcionará melhor. Por exemplo, veja Regexkit ou Caixa de ferramentas do Google para Mac, os quais implementam suporte regular de expressão usando uma categoria no NSString.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top