MonoTouch绑定不创建部分类

时间:2011-09-30 16:08:31

标签: c# objective-c ios binding xamarin.ios

我正在尝试执行MonoTouch binding page上显示的内容并向绑定类添加一些方法。它说我要做的就是将它们包含在一个单独的文件中定义的部分类中,该文件包含在使用-s选项的生成过程中。问题是生成的类不是部分类,当我运行btouch时,我得到以下错误:

  

$ / Developer / MonoTouch / usr / bin / btouch -v Node.cs -s:Extensions.cs   / Developer / MonoTouch / usr / bin / smcs -unsafe -target:library Node.cs -nowarn:436 -out:/var/folders/cy/g71b7mr91rn4slbpq5cm39140000gn/T/u983s550.k1k/temp.dll -r:/ Developer / MonoTouch / usr / lib / btouch / btouch.exe Extensions.cs -r:/Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll
  Node.cs(7,19):错误CS0260:类型NodeNameSpace.Node'. Another partial declaration of this type exists Extensions.cs(5,30): (Location of the symbol related to previous error) Extensions.cs(5,30): error CS0261: Partial declarations of NodeNameSpace.Node'声明时缺少部分修饰符必须是所有类,所有结构或所有接口   Node.cs(7,19):(与先前错误相关的符号的位置)   Extensions.cs(7,29):错误CS0106:修饰符public' is not valid for this item Extensions.cs(10,25): error CS0531: NodeNameSpace.Node.IsExpanded.get':接口成员不能有定义   Extensions.cs(14,25):错误CS0531:`NodeNameSpace.Node.IsExpanded.set':接口成员不能有定义   编译失败:5个错误,0个警告   btouch:API绑定包含错误。

根据binding上的MonoTouch页面:

  

生成器从API定义文件生成的每个类都是部分类

Node.cs

using System;
using MonoTouch.Foundation;

namespace NodeNameSpace
{
    [BaseType (typeof (NSObject))]
    interface Node
    {
        [Export ("expanded")]
        NSNumber Expanded { get; set; }
    }
}

Extensons.cs

using MonoTouch.Foundation;

namespace NodeNameSpace 
{
    public partial class Node
    {
        public bool IsExpanded
        {
            get
            {
                return Expanded.BoolValue;
            }
            set
            {
                Expanded = NSNumber.FromBool(value);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

看起来该页面已过期。进行更多搜索我在论坛中找到了这个post

编译上面示例的正确命令是:

/Developer/MonoTouch/usr/bin/btouch -v Node.cs --sourceonly genfiles --outdir=gen

接下来是:

/Developer/MonoTouch/usr/bin/smcs -out:Node.dll `cat genfiles` Extensions.cs -r:/Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll -target:library

答案 1 :(得分:2)

这是一个很长的文档页面,但这应该做你想要的:

$ /Developer/MonoTouch/usr/bin/btouch Node.cs -x:Extensions.cs  
$ ls -l Node.dll 
-rwxr-xr-x  1 sebastienpouliot  staff  5120 30 Sep 13:30 Node.dll

您的问题是使用 -s ,它在将您的接口编译为部分类时使用(对于扩展方法来说太早)并将绑定编译为.dll。

您想要的是 -x ,其中源文件仅用于第二次编译(源为.dll)。 -s 选项对枚举最有用,因为您需要在接口和最终程序集(.dll)中使用它们。

要获得进一步的帮助,请执行以下操作:

/Developer/MonoTouch/usr/bin/btouch --help