执行以下代码时
style = [self performSelector:sel withObject:(id)state];
sel中的断点未命中。这是正常行为吗?
NSString* key = state == UIControlStateNormal
? selector
: [NSString stringWithFormat:@"%@%d", selector, state];
TTStyle* style = [_styles objectForKey:key];
if (!style) {
SEL sel = NSSelectorFromString(selector);
if ([self respondsToSelector:sel]) {
style = [self performSelector:sel withObject:(id)state];
if (style) {
if (!_styles) {
_styles = [[NSMutableDictionary alloc] init];
}
[_styles setObject:style forKey:key];
}
}
}
答案 0 :(得分:1)
在您对帖子的一条评论中,您提到此代码来自three20style库,并且当您放置断点时,它不会被命中。可能正在发生的事情是你正在遵循Three20推荐的链接Three20库的做法:在Build设置的“Other Linker Flags”部分中,你可能有一大堆-force-load
个参数,有点像这样:
-force-load libThree20UICommon.a -force-load libThree20.a ...
问题是,当你以这种方式链接时,断点不起作用。作为解决方法,仅在调试配置中(不在您的发布配置中),从“其他链接器标志”中删除所有这些参数,并将其放入:
-all_load -ObjC
我并不熟悉这些旗帜之间的确切区别;我所知道的是,使用-all_load -ObjC
可以让你的断点工作。我不建议更改Release配置的设置,因为我不确定更改的确切影响。
答案 1 :(得分:0)
尝试style = [self performSelector:@selector(sel)withObject:(id)state];