MonoTouch绑定到Pony Debugger - PDDebugger.DefaultInstance始终为null

时间:2013-04-22 06:51:53

标签: xamarin.ios xamarin

我正在为pony Debugger编写一个绑定,这应该非常简单吗?

通过类成员“defaultInstance”

访问Pony
@interface PDDebugger : NSObject

+ (PDDebugger *)defaultInstance;

我实施的是这样的:

[assembly: LinkWith ("libPonyDebugger.a", LinkTarget.Simulator, ForceLoad = true)]

    namespace PonyDebugger
{
    [BaseType (typeof (NSObject))]
    interface PDDebugger
    {
        [Static] [Export ("defaultInstance")]
        PDDebugger DefaultInstance { get; }

        [Export ("enableViewHierarchyDebugging")]
        PDDebugger EnableViewHierarchyDebugging();
    }
}

我可以编译绑定正常 - 但是当我调用“PDDebugger.DefaultInstance”时,我只是返回null。我错过了什么?

我怎样才能确定消息是否传递给基础ObjC对象?

谢谢!

[编辑] 我已将我的绑定更新为: 使用系统; 使用MonoTouch.Foundation; 使用MonoTouch.ObjCRuntime;

** libPonyDebugger.linkwith.cs **

[assembly: LinkWith ("libPonyDebugger.a", LinkTarget.Simulator, ForceLoad = true,
                     Frameworks = "Security CFNetwork Foundation CoreGraphics UIKit CoreData", LinkerFlags = "-ObjC -licucore")]

namespace PonyDebugger
{
    [BaseType (typeof (NSObject), Name="PDDebugger")]//, DisableDefaultCtor]
    interface PDDebugger
    {
        //+ (PDDebugger *)defaultInstance;
        [Static, Export ("defaultInstance")]
        PDDebugger DefaultInstance();

        [Export ("enableViewHierarchyDebugging")]
        PDDebugger EnableViewHierarchyDebugging();
    }
}

** libSocketRocket.linkwith.cs **

using System;
using MonoTouch.ObjCRuntime;

[assembly: LinkWith ("libSocketRocket.a",  LinkTarget.ArmV7 | LinkTarget.Simulator,
                     Frameworks = "Security CFNetwork Foundation CoreGraphics UIKit CoreData", ForceLoad = true, LinkerFlags = "-ObjC -licucore")]

所有btouches /编译为本机并运行 - 但PDDebugger.DefaultInstance()仍然返回null。

2 个答案:

答案 0 :(得分:0)

如果您获得null,则可能意味着未正确链接本机库。

您是在模拟器还是设备上运行?你是如何编译绑定的?您确定本机库是否支持您正在测试的架构?

答案 1 :(得分:0)

我刚刚做了一个快速测试来绑定PonyDebugger。绑定很好 - 但它没有用,因为方法调整 IIRC。

通过快速审核,您的linkwith.cs看起来不完整。我的是:

[assembly: LinkWith ("libPonyDebugger.a", LinkTarget.ArmV7 | LinkTarget.Simulator,
    ForceLoad = true, 
    Frameworks = "Security CFNetwork CoreData", 
    LinkerFlags = "-ObjC -licucore" )]

我还需要包含libSocketRocket.a,因为我向pony添加了框架和标志,因此更简单。

[assembly: LinkWith ("libSocketRocket.a", LinkTarget.ArmV7 | LinkTarget.Simulator,
    ForceLoad = true)]

这应该会为您提供非空 PDDebugger的实例 - 但您需要更多工作才能获得实际结果。可悲的是,我没有时间进一步挖掘它,但是当你弄清楚其余部分时,请告诉我们: - )