2010-06-05 62 views
0

我很疑惑...我有这个函数“colorWithHexString”...当我将它包含在调用它的viewcontroller中时,它工作正常。但是当我将它移动到一个单独的“BSJax”类并使用相同的输入参数调用它时,它会引发无法识别的选择器错误。这里的电话:无法识别的选择器灾难

BSjax *bsjax = [BSjax new]; 
NSString *hexString = [NSString stringWithString:@"CCCCFF"]; 
[self.view setBackgroundColor:[bsjax colorWithHexString:hexString]]; 

我敢肯定有一些关于我打电话,防止它作为一个bsjax方法工作的功能的方式。任何反馈将不胜感激。

BSjax.h包括:

+ (UIColor *)colorWithHexString:(NSString *)stringToConvert; 

...和BSjax.m包括:

+ (UIColor *)colorWithHexString:(NSString *)stringToConvert 
{ 
    NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 

    // String should be 6 or 8 characters 
    if ([cString length] < 6) NSLog(@"colorWithHexString called with parameter < 6 characters in length"); 

    // strip 0X if it appears 
    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2]; 

    if ([cString length] != 6) NSLog(@"colorWithHexString called with parameter != 6 characters in length"); 

    // Separate into r, g, b substrings 
    NSRange range; 
    range.location = 0; 
    range.length = 2; 
    NSString *rString = [cString substringWithRange:range]; 

    range.location = 2; 
    NSString *gString = [cString substringWithRange:range]; 

    range.location = 4; 
    NSString *bString = [cString substringWithRange:range]; 

    // Scan values 
    unsigned int r, g, b; 
    [[NSScanner scannerWithString:rString] scanHexInt:&r]; 
    [[NSScanner scannerWithString:gString] scanHexInt:&g]; 
    [[NSScanner scannerWithString:bString] scanHexInt:&b]; 

    return [UIColor colorWithRed:((float) r/255.0f) 
          green:((float) g/255.0f) 
          blue:((float) b/255.0f) 
          alpha:1.0f]; 
} 
+2

发布您的colorWithHexString的方法定义,并请张贴在它定义的位置(哪个文件) – coneybeare 2010-06-05 01:44:06

+0

@coneybeare ... k,添加了声明和定义......令人费解的是当我将该函数移动到viewcontroller本身改变任何东西...嗯,我改变它是一个私人的方法,而不是公共...它的作品就像一个魅力) – codemonkey 2010-06-05 01:49:47

+0

我很难理解指针和内存管理,并想知道如果我应该保留我的十六进制字符串变量或东西? – codemonkey 2010-06-05 01:50:49

回答

6

您试图在实例上调用类方法。

注意的+

+ (UIColor *)colorWithHexString:(NSString *)stringToConvert; 

这意味着你只能调用该方法[ClassName classmethod]

然后在这里您要使用的方法与实例[instanceObject classmethod]

BSjax *bsjax = [BSjax new]; 
[self.view setBackgroundColor:[bsjax colorWithHexString:hexString]]; 

尝试将其更改为:

[self.view setBackgroundColor:[BSjax colorWithHexString:hexString]]; 

而这应该让你直。

+0

HA!尼斯。我在这种语言中无能为力......我甚至没有尝试过这个项目。我认为+/-代表公共/私人。你的建议像魅力一样工作......^1并标记为答案。谢谢! – codemonkey 2010-06-07 16:23:14

2

是在头@interface BSjax colorWithHexString声明,并没有你说的#import头到报告错误的源文件?

编辑:

+ (UIColor *)colorWithHexString:(NSString *)stringToConvert; 

上面代码(+)声明一个类方法,这意味着它应与类名来调用。你正在用一个没有定义它的类的实例调用它。尝试:

[self.view setBackgroundColor:[BSjax colorWithHexString:hexString]]; 
+0

两种都有yes – codemonkey 2010-06-05 01:44:44

相关问题