您可以用您自己的實現替換-[UITableViewCell setSelected:]
以進行調試。下面,將調用UITableViewCellSetSelected
而不是UIKit的方法。
static void (*__originalUITableViewCellSetSelected)(UITableViewCell *, SEL, BOOL) ;
static void UITableViewCellSetSelected(UITableViewCell * self, SEL _cmd, BOOL b)
{
// your code here... (or set a breakpoint here)
NSLog(@"%@<%p> b=%s\n", [ self class ], self, b ? "YES" : "NO") ;
(*__originalUITableViewCellSetSelected)(self, _cmd, b) ; // call original implementation:
}
@implementation UITableViewCell (DebugIt)
+(void)load
{
Method m = class_getInstanceMethod([ self class ], @selector(setSelected:)) ;
__originalUITableViewCellSetSelected = (void(*)(id, SEL, BOOL))method_getImplementation(m) ;
method_setImplementation(m, (IMP)UITableViewCellSetSelected) ;
}
@end
我沒有足夠的勇氣來發布這個真正的答案,因爲我只是猜測,但我相信只是沒有提供給調試器。你沒有得到UIKit的符號,所以調試器不知道這個方法的參數名稱是什麼,運行時可能能夠找出它的類型,但它與具有真正的符號信息不一樣。我猜你的子類技巧是可行的,因爲你也將該符號信息提供給調試器。 – 2013-03-20 00:29:16