Нераспознанные проблемы селектора - PullRequest
0 голосов
/ 05 июня 2010

Я озадачен ... У меня есть эта функция "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 ]

6 голосов
/ 05 июня 2010

Вы пытаетесь вызвать метод класса в экземпляре.

Обратите внимание на +:

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

Это означает, что вы можете вызывать метод только как [ClassName classmethod]

И тогда вы пытаетесь использовать метод с экземпляром [instanceObject classmethod]:

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

Попробуйте изменить его на:

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

И это должно привести вас в порядок.

2 голосов
/ 05 июня 2010

Объявляется ли colorWithHexString в @interface BSjax в заголовке, и вы #import этого заголовка в исходный файл, где сообщается об ошибке?

Edit:

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

Приведенный выше код (+) объявляет метод класса, то есть он должен вызываться с именем класса. Вы вызываете его с экземпляром класса, для которого он не определен. Попробуйте:

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