我正在尝试使用十六进制颜色代码创建自定义颜色。我有一个名为UIColor + Hex的单独类,它接受一个十六进制字符串并将其转换为颜色代码并重新编写UIColor。
的UIColor + Hex.h
#import <UIKit/UIKit.h>
@interface UIColor (Hex)
+ (UIColor *)colorWithHexString:(NSString *)hex;
@end
的UIColor + Hex.m
#import "UIColor+Hex.h"
@implementation UIColor (Hex)
+ (UIColor *)colorWithHexString:(NSString *)hex
{
if ([hex length]!=6 && [hex length]!=3)
{
return nil;
}
NSUInteger digits = [hex length]/3;
CGFloat maxValue = (digits==1)?15.0:255.0;
NSUInteger redHex = 0;
NSUInteger greenHex = 0;
NSUInteger blueHex = 0;
sscanf([[hex substringWithRange:NSMakeRange(0, digits)] UTF8String], "%x", &redHex);
sscanf([[hex substringWithRange:NSMakeRange(digits, digits)] UTF8String], "%x", &greenHex);
sscanf([[hex substringWithRange:NSMakeRange(2*digits, digits)] UTF8String], "%x", &blueHex);
CGFloat red = redHex/maxValue;
CGFloat green = greenHex/maxValue;
CGFloat blue = blueHex/maxValue;
return [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
}
@end
然后我将UIColor + Hex.h导入到我的其他类之一并通过以下方式调用它:
[self setSelectedfillColor:[UIColor colorWithHexString:@"FF0000"].CGColor];
每当我点击此代码时,我都会收到此错误...
'NSInvalidArgumentException',原因:'+ [UIColor colorWithHexString:]:无法识别的选择器发送到类0x873d60'
我已经尝试了我能想到的一切,但我仍然会遇到这个错误。任何人都有任何想法为什么会发生这种情况?
答案 0 :(得分:7)
在构建设置下将-ObjC -all_load
添加到项目中的其他链接器标志。
-ObjC允许静态库使用特定于Objective-c的东西,如kvc或类别。
-all_load解决gcc / llvm中的错误,其中-ObjC未正确使用。
https://developer.apple.com/library/mac/#qa/qa2006/qa1490.html
答案 1 :(得分:2)
在发布时测试了您的类别,即使使用cgcolor属性方法也能正常工作。将这两行分开并确保问题不在于setSelectedFillColor。有时调试错误可能会产生误导。
答案 2 :(得分:2)
确保将UIColor+Hex.m
添加到Build Phases选项卡的Compile Sources列表中。
编译器在构建期间不会抱怨,但在运行时会在选择器上死掉。
很多时候,它是XCode中“编译源”中缺少的类。