Как вводить команды в отладчике Xamarin Studio

1

Я хочу ввести следующую команду в отладчик

po [[UIWindow keyWindow] _autolayoutTrace] 

Как мне это сделать в Xamarin Studio?

Редактировать:

Я видел этот код Objective-C

NSLog(@"%@", [[UIWindow keyWindow] _autolayoutTrace]);

в программном изменении параметров автонастройки при изменении ориентации вместе с определением интерфейса для этого.

// for debugging auto layout.
@interface UIWindow (AutoLayoutDebug)
+(UIWindow *)keyWindow;
-(NSString *)_autolayoutTrace;
@end

Я хотел бы знать, как это можно сделать в Xamarin iOS?

Теги:
xamarin.ios
autolayout
xamarin-studio

2 ответа

2
Лучший ответ
using MonoTouch.ObjCRuntime;

var str = new NSString (Messaging.IntPtr_objc_msgSend (UIApplication.SharedApplication.KeyWindow.Handle, new Selector ("_autolayoutTrace").Handle));

И "str" будет содержать строку, которую вы можете использовать с Console.WriteLine

  • 0
    Что такое window ? Я получаю результат, если использую UIApplication.SharedApplication.KeyWindow.Handle . Но я не вижу неоднозначного расположения или чего-то подобного, только след всех объектов пользовательского интерфейса. View.Window.Handle кажется, делает то же самое. Это ожидаемый результат AutoLayoutTrace ? Возможно, я не вижу этого, потому что система уже разрешила ограничения. Мне нужно что-то вроде паузы?
  • 0
    Кажется, что пространство имен ObjCRuntime.Messaging было сделано внутренним, и вы не можете использовать это для унифицированного API.
5

Если вы используете унифицированный API, решение, отправленное miguel.de.icaza, больше не работает, потому что вы получаете

"ObjCRuntime.Messaging" недоступен из-за уровня защиты

Нужно использовать P/Invoke:

using System;
using System.Runtime.InteropServices;

using Foundation;
using UIKit;
using ObjCRuntime;

public static class UIViewAutolayoutTraceExtensions
{
    [DllImport(Constants.ObjectiveCLibrary, EntryPoint="objc_msgSend")]
    private static extern IntPtr IntPtr_objc_msgSend (IntPtr receiver, IntPtr selector);

    public static NSString AutoLayoutTrace(){
        return (NSString)Runtime.GetNSObject(IntPtr_objc_msgSend(UIApplication.SharedApplication.KeyWindow.Handle, new Selector ("_autolayoutTrace").Handle));
    }

    public static NSString RecursiveDescription(){
        return (NSString)Runtime.GetNSObject(IntPtr_objc_msgSend(UIApplication.SharedApplication.KeyWindow.Handle, new Selector ("recursiveDescription").Handle));
    }
}

Затем вы можете использовать его следующим образом:

Console.WriteLine(UIViewAutolayoutTraceExtensions.RecursiveDescription ());

Одно предупреждение: вы можете вызвать этот код только после того, как все было загружено. В противном случае KeyWindow будет null. Таким образом, нет возможности установить точку останова, а затем вызвать этот код. Вы можете вызывать этот код только в том случае, если вы предоставляете кнопку или что-то подобное, с которой вы запускаете действие.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню