【问题标题】:Xamarin iOS Bindings Libraries issue with TypedefsXamarin iOS 绑定库与 Typedef 相关的问题
【发布时间】:2016-01-20 02:13:02
【问题描述】:

我正在尝试从这个项目 https://github.com/Eclair/CircleProgressBar 创建一个绑定库。

我使用 Sharpie 生成 ApiDefinition.cs 和 .a 文件。

> sharpie pod init ios CircleProgressBar
> sharpie bind

我将 .a 文件复制到我的项目中,并将生成的 c# 代码放入我的 ApiDefinition.cs 文件中。 但是生成的代码无法编译。

我认为问题在于,这些行

typedef NSString*(^StringGenerationBlock)(CGFloat progress);
typedef NSAttributedString*(^AttributedStringGenerationBlock)(CGFloat progress);

被转换成这些

delegate string StringGenerationBlock (nfloat arg0);
delegate NSAttributedString AttributedStringGenerationBlock (nfloat arg0);

但是编译器建议用 IntPtr 替换字符串,即使我这样做了,即使项目已编译,如果我尝试实例化 CircleProgressBar,我的应用程序也会崩溃

【问题讨论】:

    标签: c# ios xamarin objective-sharpie


    【解决方案1】:

    第一:

    将导致错误的string 更改为NSString(并且不是 IntPtr):

    // typedef NSString * (^StringGenerationBlock)(CGFloat);
    delegate NSString StringGenerationBlock (nfloat arg0);
    

    现在您的解决方案中的绑定项目应该可以正确编译了。

    第二次:

    在实际设备上调试/测试

    默认情况下sharpie pod XXXXX不会创建一个可以在 iOS 模拟器中工作的静态库,并且它也不允许创建 fat 库,你必须手动完成。

    如果需要,创建一个基于 iphonesimulator 的静态库:

    为此,您需要手动构建 xcode 项目,并将 sdk 设置为 iphonesimulator

    xcodebuild -project Pods.xcodeproj -target Pods -sdk iphonesimulator -configuration Debug clean build
    

    您可以将该输出与原始 .a 一起使用来创建胖库。

    非常简单的例子:

    if (circleProgressBar == null) {
        circleProgressBar = new CircleProgressBar ();
        circleProgressBar.Frame = new CoreGraphics.CGRect (this.View.Frame.Width / 4, this.View.Frame.Width / 4, this.View.Frame.Width / 2, this.View.Frame.Width / 2);
        circleProgressBar.ProgressBarWidth = 33.0f;
        circleProgressBar.BackgroundColor = UIColor.Clear;
        circleProgressBar.ProgressBarProgressColor = UIColor.Green;
        circleProgressBar.ProgressBarTrackColor = UIColor.Red;
        circleProgressBar.StartAngle = 0.0f;
        circleProgressBar.SetProgress (0.0f, false);
        this.Add (circleProgressBar);
    } else {
        circleProgressBar.SetProgress (circleProgressBar.Progress + 0.1f, true);
    }
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-24
      • 2019-05-18
      • 2017-07-26
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多