Question

J'ai un autre problème dans le même code ... Je reçois cette erreur:

  

méthode d'initialisation -initWithCharactersNoCopy: Longueur: freeWhenDone: ne peut pas être envoyé à un objet abstrait de la classe NSString_RegEx: Créer une instance concrète

Mais je ne comprends pas l'erreur ou ce que je dois faire ...

edit:

NSString *pageContent = [[NSString alloc] initWithData:pageContents encoding:NSASCIIStringEncoding];
NSString_RegEx *pContent = [[NSString_RegEx alloc] initWithString: pageContent];
Était-ce utile?

La solution

Vous voyez cela parce que NSString est un cluster de classe. Voir les documents d'Apple ici pour une explication générale, et ici des notes spécifiquement sur le sous-classement NSString. Fondamentalement, NSString est une classe abstraite sans méthode de stockage des caractères, et les différentes méthodes -initWith ... renvoient toutes différentes sous-classes concrètes de NSString basées sur la méthode d'initialisation. Normalement, lorsque vous utilisez NSString, ce qui est totalement transparent. Cependant, si vous voulez sous-classe NSString, vous devez au moins mettre en œuvre les méthodes de base (-length et -characterAtIndex :) plus les méthodes d'initialisation que vous voulez avoir (plus, de toute évidence, un moyen de stocker les caractères de la chaîne ).

Si vous voulez juste ajouter des fonctionnalités à NSString, subclassing est généralement pas nécessaire. Tout d'abord, vous devriez vérifier si une catégorie ou une fonction d'exploitation sur une NSString ou une méthode sur une classe qui contient le NSString fonctionnera mieux. Par exemple, voir RegexKit ou Google Boîte à outils pour Mac , tous deux implémenter le support d'expression régulière en utilisant une catégorie sur NSString.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top