Pull to refresh

Comments 7

Опечатку CALAyer на CALayer исправляем и пробуем:
expr -- ((CALayer *)[(UIWindow *)[(MyAppDelegate *)[UIApplication sharedApplication].delegate window] layer]).speed = 0.2

получаем:
error: property 'delegate' not found on object of type 'id'
error: 1 errors parsing expression

Причина? Перемудрили с кастами. Операция приведения типа имеет более высокий приоретет перед операцией точка. Поэтому вы результат [UIApplication sharedApplication] приводите к типу MyAppDelegate*. Вы же рассчитывали на такой приоретет: (MyAppDelegate *)([UIApplication sharedApplication].delegate). Да, Objective-C не хватает синтаксиса приведения типов из C++.
Да и не нужен этот каст, вообще. И каст к UIWindow* тоже не нужен. Правильная команда, без ненужных кастов, выглядит так:
expr -- ((CALayer *)[[[[UIApplication sharedApplication] delegate] window] layer]).speed = 0.2
Ошибку поправил. Больше спасибо, за комментарий.
Я уже по привычке набираю приведение всех типов, где возвращается id, забыл что window часть UIApplicationDelegate.
Аналогично. Запускаем:
po [(MyAppDelegate *)[UIApplication sharedApplication].delegate window]

Получаем:
error: no known method '+sharedApplication'; cast the message send to the method's return type
error: 1 errors parsing expression


Исправляем:
po [[[UIApplication sharedApplication] delegate] window]

Получаем ожидаемый результат:
<UIWindow: 0x15d6f2f0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x15d6d8a0>; layer = <UIWindowLayer: 0x15d6d720>>


Вы бы проверили каждую команду на работоспособность, прежде чем людям советовать.
Ну или же вот так
po [((UIApplication *)[UIApplication sharedApplication]).delegate window]

Я предпочитаю в коде использовать NSObject.property, нежели [NSObject getter]. Использование их в lldb приводит к излишним скобкам, но привычка.
Как только излечитесь от этой привычки, автоматически излечитесь от глюков с кастами. Я уже излечился. Как вы правильно заметили, не нужны будут лишние скобки в кастах. Да и каст не туда вписать будет значительно труднее.
Да, так и есть. Я использовал самый популярный набор задач. Но аналога для pvc нет. А если говорить о UIView, то нельзя вывести superview рекурсивно. Но с аддоном можно — pviews --up <_pointer_>. То есть ли Вы остановились где на breakpoint и хотите посмотреть, не всю иерархию UIView, а только относительно конкретной UIView(причем вврех), используйте приведенную команду.
Sign up to leave a comment.

Articles