当我访问 static propertySharedController
时,值为 null,但 Objective Sharpie 生成的 API 定义只提供了一个 getter。
BBDeviceController
已实例化,但其SharedController
上的属性为空。因为它只有一个 getter,所以我不相信我能够在代码中实例化该属性。据我所知,SharedController
没有在BBDeviceController
的构造函数中初始化。我不确定BBDeviceController
是静态类还是仅遵循单例设计模式,但无论哪种方式,更新该类都不是解决方案。
BBDeviceController.h
@interface BBDeviceController : NSObject {
NSObject <BBDeviceControllerDelegate>* delegate;
BOOL debugLogEnabled;
BOOL detectAudioDevicePlugged;
}
@property (nonatomic, weak) NSObject <BBDeviceControllerDelegate>* delegate;
@property (nonatomic, getter=isDebugLogEnabled, setter=setDebugLogEnabled:) BOOL debugLogEnabled;
@property (nonatomic, getter=isDetectAudioDevicePlugged, setter=setDetectAudioDevicePlugged:) BOOL detectAudioDevicePlugged;
+ (BBDeviceController *)sharedController;
生成的 API 定义 ( APIDefinition.cs
)
[BaseType(typeof(NSObject))]
[Protocol]
interface BBDeviceController
{
...
// +(BBDeviceController *)sharedController;
[Static]
[Export("sharedController")]
BBDeviceController SharedController { get; }
...
}
从项目的视图控制器调用
public BBDeviceController bbDeviceController;
public override void ViewDidLoad()
{
base.ViewDidLoad();
bbDeviceController = BBDeviceController.SharedController;
ConnectDevice();
}
private void ConnectDevice()
{
bbDeviceController.StartBTScan(new string[] { DEVICE_NAME }, 60);
}
从目标 C 库的文档中,您可以sharedController
这样使用:
[[BBDeviceController sharedController] setDelegate:self];
尝试执行 C# 等效项时,我收到一个错误,因为SharedController
它为 null。其他可能感兴趣的是SharedController
生成的 API 定义文件中的定义被标记为[Verify(MethodToProperty)]
,我必须手动添加[Static]
才能从代码中访问它。