Erro "Crie uma instância concreta!"
-
24-09-2019 - |
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];
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.