【问题标题】:Monotouch binding for XCode libraryXCode 库的 Monotouch 绑定
【发布时间】:2012-03-24 19:10:38
【问题描述】:

我正在尝试绑定一个 Xcode 库,并且正在努力解决如何做到这一点。当我尝试访问任何事件或方法时,应用程序严重崩溃。

下面是我做的描述

using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.ObjCRuntime;
using MonoTouch.UIKit;

namespace BardecodeBinding
{
    [BaseType (typeof(NSObject),
            Delegates= new string [] {"WeakDelegate"},
            Events = new Type [] { typeof(BardecodeDelegate) })]
    interface Bardecode
    {
        [Export ("delegate", ArgumentSemantic.Assign)]
        [NullAllowed]
        NSObject WeakDelegate { get; set; }

        [Wrap ("WeakDelegate")]
        [NullAllowed]
        BardecodeDelegate Delegate { get; set; }

        [Export("ScanBarcodeFromViewFinder")]
        void ScanBarcodeFromViewFinder();
    }

    [BaseType (typeof(NSObject))]
    interface BardecodeDelegate
    {
        [Export ("didfinish:sender:notification:"), EventArgs("BardecodeDidFinish")]
        void DidFinish (Bardecode sender, NSNotification notification);
    }
}

我正在尝试从 Softek (http://www.bardecode.com/) 绑定 Bardecode 库。这是(部分)他们的头文件

#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
#include "barcode.h"

#if TARGET_IPHONE_SIMULATOR
@interface Bardecode : NSObject <UINavigationControllerDelegate,     UIImagePickerControllerDelegate>
#else
@interface Bardecode : NSObject <UINavigationControllerDelegate,     UIImagePickerControllerDelegate, AVCaptureVideoDataOutputSampleBufferDelegate>
#endif
{
...
- (void) ScanBarcodeFromViewFinder;
...
}

@interface NSObject(NSWindowNotifications)
- (void)BardecodeDidFinish:(NSNotification*)notification;
@end

这是我尝试使用生成的绑定的方法

    Bardecode bardecode = new Bardecode();
    bardecode.DidFinish += BardecodeDidFinish;
    bardecode.ScanBarcodeFromViewFinder();

还有回调例程:

    private void BardecodeDidFinish(object sender, EventArgs args)
    {
    }

虽然文档声明应该生成一个名为 BardecodeDidFinishEventArgs 的类,但事实并非如此。

这是 MonoDevelop 添加库文件后生成的内容。

using System;
using MonoTouch.ObjCRuntime;

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

问候 保罗

【问题讨论】:

    标签: binding xamarin.ios


    【解决方案1】:

    我正在尝试绑定一个 Xcode 库,并且正在努力解决如何做到这一点。当我尝试访问任何事件或方法时,应用程序严重崩溃。

    您有这些崩溃的崩溃报告吗?您是否确切知道哪一行托管代码导致了崩溃?

    虽然文档声明应该生成一个名为 BardecodeDidFinishEventArgs 的类,但事实并非如此。

    Bindings 项目不会生成你会看到的源代码,生成的源代码在编译后会自动删除。您可以在绑定库上运行 Reflector 以查看生成的确切内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多