2016-06-02 2 views
1

J'ai une catégorie telle que définie:No Know Classe Méthode NSString Catégorie

#import <Foundation/Foundation.h> 

@interface NSString (MyApp) 

+ (UIColor *)colorFromHexString; 

@end 


#import "NSString+MyApp.h" 

@implementation NSString (MyApp) 

+ (UIColor *)colorFromHexString 
{ 
    self = [self stringByReplacingOccurrencesOfString:@"#" withString:@""]; 
    unsigned rgbValue = 0; 
    NSScanner *scanner = [NSScanner scannerWithString:hexString]; 
    [scanner scanHexInt:&rgbValue]; 
    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0]; 
} 

@end 

Je reçois une erreur sur la ligne self = [self stringByReplacingOccurrencesOfString:@"#" withString:@""]; qui dit: "No know class method for selector stringByReplacingOccurrencesOfString:withString" and "cannot assign self in a class method".

Je suis confus quant à pourquoi je ne suis pas capable de le faire dans un NSString Category. J'ai vu examples online qui fait des choses très similaires avec 'self' dans un NSString Category donc je ne sais pas pourquoi cela ne fonctionne pas ici.

Quelqu'un sait ce que je fais mal?

+2

En général, vous ne devez pas ajouter de catégories aux classes système. Si vous le faites, vous devriez les préfixer avec quelque chose '_vente _...' pour éviter les collisions. En outre, cela aurait probablement plus de sens en tant que catégorie sur UIColor (comme une méthode de classe), car c'est un peu comme une méthode d'usine de couleur. – bbum

Répondre

1

Il y a plusieurs erreurs dans votre code.

utiliser la méthode d'instance (-) à la place de la méthode statique (+)

// INCORRECT. self in a static method points to class object 
// + (UIColor *)colorFromHexString 

// CORRECT. self is instance method points to instance of class. 
- (UIColor *)colorFromHexString 

également sur la ligne 1 au lieu d'assigner hexStringself.

- (UIColor *)colorFromHexString 
{ 
    NSString *hexString = [self stringByReplacingOccurrencesOfString:@"#" withString:@""]; 
    unsigned rgbValue = 0; 
    NSScanner *scanner = [NSScanner scannerWithString:hexString]; 
    [scanner scanHexInt:&rgbValue]; 
    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0]; 
} 
+0

Super, merci! FYI. Avoir hexString comme paramètre dans scannerWithString: était une faute de frappe. J'avais l'intention d'avoir moi-même - pas que ça marche de toute façon ... – tentmaking

+1

Besoin de moooore ☕️ –