2013-04-22 34 views
2

我正在为小马调试器写一个绑定,这应该是非常简单的权利? - 但是当我打电话“PDDebugger.DefaultInstanceMonoTouch绑定到小马调试器 - 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(); 
    } 
} 

我可以编译绑定罚款:

小马通过类成员“defaultInstance”

@interface PDDebugger : NSObject 

+ (PDDebugger *)defaultInstance; 

,我有这样的执行访问“我只是回到空。我错过了什么?

我怎么能确定消息被传递给底层的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。

回答

0

如果您得到空值,这可能意味着本机库未正确链接。

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

+0

您好jstedfast - 感谢您的答复。 我编译它和模拟器的示例应用程序 - 然后将libPonyDebugger.a和libSocketRocket.a从DEveloper/XCode/DerivedData复制到我的项目目录中,并使用'btouch -unsafe --outdir = tmp -out: PonyDebugger.dll libPonyDebugger.linkwith.cs -x libSocketRocket.linkwith.cs --link-with = libPonyDebugger.a,libPonyDebugger.a --link-with = libSocketRocket.a,libSocketRocket.a -v'我认为你是对的 - 我不认为这是加载,因为我在小马启动日志消息,但不要让他们在控制台中出现。 – Adam 2013-04-22 20:02:37

+0

哦 - 我进行模拟器的所有运行 - 我实际上不需要设备支持... – Adam 2013-04-22 20:06:23

0

前段时间我做了一个快速测试来绑定PonyDebugger。绑定是好的 - 但它没有工作,因为方法swizzling IIRC。

从快速审查您的linkwith.cs看起来不完整。我的是:

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

我还需要包括libSocketRocket.a,简单,因为我加入了框架和标志小马。

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

这应该给你的PDDebugger一个非空实例 - 但你需要更多的工作,以获得实际的结果出来。可悲的是我没有时间进一步挖掘它,但让我们知道当你找出其余的:-)

+0

感谢Poupou - 希望这会让我更进一步。我添加了额外的框架(基本上xcode项目中列出的所有东西) - 但是我在licucore中提到了一个单一的本地链接器错误,我认为你有解决方案。今晚我会试一试并报告。我需要的只是这个项目的UI检查。如果我能正常工作,我会发布一切。 – Adam 2013-04-22 22:08:27

+0

嗨Poupou,你的帖子让我有点进一步,但仍然回零。我更新了我的帖子... – Adam 2013-04-23 02:07:30