Monotouch绑定 - “无法从源类型转换为目标类型。”

时间:2012-12-04 06:00:58

标签: binding xamarin.ios

我是Monotouch的新手。最近,我正在开发一个Monotouch绑定项目,它将自己开发的自定义iOS框架绑定到.NET框架库中。我遵循Xamarin的说明,但目前我遇到了无法解决的问题。这是我的代码。

**HEADER FILE IN OBJECTIVE C**

*GRG.h*
@interface GRG: NSObject {} 

// Shared instance 
+ (GRG*) sharedG; 

// Preference class 
@property (nonatomic, readonly) GRGPreferences  *preferences; 

// Driver version 
@property (readonly,copy) NSString* driverVersion; 

// More parameters... 
@end 

*GRGPreferences.h*
@interface GRGPreferences : NSObject <GRGPreferencesProtocol>{} 

// Enable DEBUG 
@property BOOL debugEnabled; 

// More parameters... 
@end 

*GRGPreferencesProtocol.h*
@protocol GRGPreferencesProtocol <NSObject>  

// More parameters... 
@end 

我将头文件转换为此

**API DEFINITION**

[BaseType (typeof (NSObject))] 
interface GRG 
{ 
        [Static][Export("sharedG")] 
        GRG SharedG{ get; } 

        [Export("preferences")] 
        GRGPreferences Preferences{ get;} 

        [Export("driverVersion", ArgumentSemantic.Copy)] 
        string DriverVersion {get;} 
} 

[BaseType (typeof (GRGPreferencesProtocol))] 
public interface GRGPreferences 
{ 
        [Export("debugEnabled")] 
        bool DebugEnabled{ get; set;} 
} 

[BaseType(typeof (NSObject))] 
[Model] 
public interface GRGPreferencesProtocol 
{} 

之后,我在mono上创建了一个测试应用程序来测试新创建的库并访问我创建的值。但是,我收到了一个错误。

  

Console.WriteLine(GRG.sharedG.DriverVersion);     - 这很好用。它返回正确的值。

     

GRGPreferences pref = GRG.SharedG.Preferences;     - 错误:“无法从源类型转换为目标类型。”

     

Console.WriteLine(GRG.sharedG.Preferences.DebugEnabled);     - 错误:“无法从源类型转换为目标类型。”

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

快速浏览一下,我认为这就是你想要的:

[BaseType (typeof (NSObject))] 
public interface GRGPreferences : GRGPreferencesProtocol {

在实施您想要的协议时,您的GRGPreferences类型会从NSObject继承。