绑定 iOS Xamarin 的嵌入式框架 END UP 给出异常?
Binding iOS embedded Framework for Xamarin END UP give exception?
请帮助我完成最后一步。
谢谢
我正在测试将 iOS 本机框架绑定到 Xamarin 库。
我创建了 iOS 框架并添加了 MyView.h、MyView.m
- MyView.m
(实例类型)initWithFrame:(CGRect)frame
{
id p = [super initWithFrame:frame];
self.backgroundColor = [UIColor greenColor];
returnp;
}
- MyView.h
@interface MyView : UIView
@end
非常简单的框架。
将 MyView.h 添加到 Public Header 并为任何架构制作通用框架。
该框架现在有
firstfile.h, MyView.h
两个文件为publicheaders
我创建了 iOS 测试应用程序(单个 VC 应用程序)并尝试了这个框架。
MyView *v = [[MyView 分配] initWithFrame:CGRectMake(0, 0, 100, 100)];
[self.view addSubview:v];
如我所料,一切顺利。它画了一个绿色的框。
我创建了 Xamarin 库项目并通过单击右键并添加文件将此框架文件导入本机引用文件夹
将此行添加到 Xamarin 库中的 ApiDefinition.cs
[BaseType(typeof(UIView))]
接口我的视图
{
[导出("initWithFrame:")]
IntPtr构造函数(CGRect框架);
}
构建正常。
我创建了 Xamarin.iOS 应用程序并将此库导入解决方案并进行了测试。
MyView v = new MyView(new CGRect(0, 0, 100, 100));
this.View.AddSubview(v);
构建成功!
但运行时错误。
Exception has been thrown by the target of an invocation.
因为我是 CSharp 和单声道的新手。
来这里来之不易,
你能帮我一点忙吗?
我的线索是第5步应该有指向MyView.h的东西。但是我不知道那里应该有什么。
我的完整源代码在这里:
https://github.com/myallb/test_iosstaticlib_to_xamarin
这段代码使用的是静态库而不是框架。
我在尝试不同的选择。
框架绑定示例....
iOS 基于 GreenView
通用框架(通过 Xcode):
- 添加一个名为
MyView
的新 Cocoa Touch Class 子类化 UIView
:
MyView.h
:
#import <UIKit/UIKit.h>
@interface MyView : UIView {
}
@end
MyView.m
:
#import "GreenView/MyView.h"
@implementation MyView
- (void)baseInit {
self.backgroundColor = [UIColor greenColor];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self baseInit];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self baseInit];
}
return self;
}
@end
GreenView.h
:
#import <UIKit/UIKit.h>
FOUNDATION_EXPORT double GreenViewVersionNumber;
FOUNDATION_EXPORT const unsigned char GreenViewVersionString[];
#import "MyView.h"
Sharpie 示例(快速启动 ApiDefinition.cs
)
sharpie bind
-sdk iphoneos9.3
-o GreenViewBinding
GreenView.framework/Headers/*.h
创建一个Xamarin.iOS
绑定项目:
- 添加
GreenView.framework
作为本机引用
ApiDefinition.cs
using UIKit;
namespace GreenViewBinding
{
// @interface MyView : UIView
[BaseType(typeof(UIView))]
interface MyView
{
}
}
用法:
创建 iOS 单视图应用程序
添加绑定项目作为参考。
ViewController.cs
ViewDidLoad
方法:
public override void ViewDidLoad()
{
base.ViewDidLoad();
var view = new GreenViewBinding.MyView();
view.Frame = new CoreGraphics.CGRect(40, 40, 100, 100);
Add(view);
}
输出:
请帮助我完成最后一步。 谢谢
我正在测试将 iOS 本机框架绑定到 Xamarin 库。
我创建了 iOS 框架并添加了 MyView.h、MyView.m
- MyView.m
(实例类型)initWithFrame:(CGRect)frame { id p = [super initWithFrame:frame]; self.backgroundColor = [UIColor greenColor];
returnp; }- MyView.h
@interface MyView : UIView @end
非常简单的框架。
将 MyView.h 添加到 Public Header 并为任何架构制作通用框架。 该框架现在有
firstfile.h, MyView.h
两个文件为publicheaders
我创建了 iOS 测试应用程序(单个 VC 应用程序)并尝试了这个框架。
MyView *v = [[MyView 分配] initWithFrame:CGRectMake(0, 0, 100, 100)]; [self.view addSubview:v];
如我所料,一切顺利。它画了一个绿色的框。
我创建了 Xamarin 库项目并通过单击右键并添加文件将此框架文件导入本机引用文件夹
将此行添加到 Xamarin 库中的 ApiDefinition.cs
[BaseType(typeof(UIView))] 接口我的视图 { [导出("initWithFrame:")] IntPtr构造函数(CGRect框架); }
构建正常。
我创建了 Xamarin.iOS 应用程序并将此库导入解决方案并进行了测试。
MyView v = new MyView(new CGRect(0, 0, 100, 100)); this.View.AddSubview(v);
构建成功! 但运行时错误。
Exception has been thrown by the target of an invocation.
因为我是 CSharp 和单声道的新手。 来这里来之不易, 你能帮我一点忙吗?
我的线索是第5步应该有指向MyView.h的东西。但是我不知道那里应该有什么。
我的完整源代码在这里: https://github.com/myallb/test_iosstaticlib_to_xamarin
这段代码使用的是静态库而不是框架。 我在尝试不同的选择。
框架绑定示例....
iOS 基于 GreenView
通用框架(通过 Xcode):
- 添加一个名为
MyView
的新 Cocoa Touch Class 子类化UIView
:
MyView.h
:
#import <UIKit/UIKit.h>
@interface MyView : UIView {
}
@end
MyView.m
:
#import "GreenView/MyView.h"
@implementation MyView
- (void)baseInit {
self.backgroundColor = [UIColor greenColor];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self baseInit];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self baseInit];
}
return self;
}
@end
GreenView.h
:
#import <UIKit/UIKit.h>
FOUNDATION_EXPORT double GreenViewVersionNumber;
FOUNDATION_EXPORT const unsigned char GreenViewVersionString[];
#import "MyView.h"
Sharpie 示例(快速启动 ApiDefinition.cs
)
sharpie bind
-sdk iphoneos9.3
-o GreenViewBinding
GreenView.framework/Headers/*.h
创建一个Xamarin.iOS
绑定项目:
- 添加
GreenView.framework
作为本机引用
ApiDefinition.cs
using UIKit;
namespace GreenViewBinding
{
// @interface MyView : UIView
[BaseType(typeof(UIView))]
interface MyView
{
}
}
用法:
创建 iOS 单视图应用程序
添加绑定项目作为参考。
ViewController.cs
ViewDidLoad
方法:
public override void ViewDidLoad()
{
base.ViewDidLoad();
var view = new GreenViewBinding.MyView();
view.Frame = new CoreGraphics.CGRect(40, 40, 100, 100);
Add(view);
}