Xcode Debugger: view value of variable

前端 未结 7 869
囚心锁ツ
囚心锁ツ 2020-12-12 14:45

My code in a UITableViewController:

delegate.myData = [myData objectAtIndex:indexPath.row];

How can I see the values of delegate.myDa

7条回答
  •  醉酒成梦
    2020-12-12 15:17

    Your confusion stems from the fact that declared properties are not (necessarily named the same as) (instance) variables.

    The expresion

    indexPath.row
    

    is equivalent to

    [indexPath row]
    

    and the assignment

    delegate.myData = [myData objectAtIndex:indexPath.row];
    

    is equivalent to

    [delegate setMyData:[myData objectAtIndex:[indexPath row]]];
    

    assuming standard naming for synthesised properties.

    Furthermore, delegate is probably declared as being of type id, i.e., the compiler hasn’t been able to provide actual type information for delegate at that point, and the debugger is relying on information provided at compile-time. Since id is a generic type, there’s no compile-time information about the instance variables in delegate.

    Those are the reasons why you don’t see myData or row as variables.

    If you want to inspect the result of sending -row or -myData, you can use commands p or po:

    p (NSInteger)[indexPath row]
    po [delegate myData]
    

    or use the expressions window (for instance, if you know your delegate is of actual type MyClass *, you can add an expression (MyClass *)delegate, or right-click delegate, choose View Value as… and type the actual type of delegate (e.g. MyClass *).

    That being said, I agree that the debugger could be more helpful:

    • There could be an option to tell the debugger window to use run-time type information instead of compile-time information. It'd slow down the debugger, granted, but would provide useful information;

    • Declared properties could be shown up in a group called properties and allow for (optional) inspection directly in the debugger window. This would also slow down the debugger because of the need to send a message/execute a method in order to get information, but would provide useful information, too.

提交回复
热议问题