C# 绑定(bind)库方法不接受实现参数

标签 c# xamarin xamarin.ios snapkit xamarin.ios-binding

尝试在 Xamarin.iOS 中实现新的 SnapChat Creative Kit,我使用 Objective Sharpie 绑定(bind)了 SDK 框架。虽然遵循其他 SDK 的官方文档(仅包含 swift 和 obj-c 的实现步骤)但不是问题 - 我成功实现了 Login Kit - 在尝试将内容发送到 SnapChat 时,我遇到了此代码的问题。

特别是在 Documentation ,要将内容发送到api,使用以下代码:

// swift

let snapImage = /* Set your image here */
let photo = SCSDKSnapPhoto(image: snapImage)

let snap = SCSDKSnapPhotoContent(snapPhoto: photo)

let api = SCSDKSnapAPI(content: snap)
api.startSnapping({ (error: Error?) in
/* Error handling */
})

根据文档,

SCSDKPhotoSnapContent is an implementation of the SCSDKSnapContent protocol. It provides a way to model a photo Snap for sharing to Snapchat.

这是我的 C# 实现:

var snapImage = GetCurrentScreenImage();
SCSDKSnapPhoto photo = new SCSDKSnapPhoto(snapImage);
SCSDKPhotoSnapContent snapPhoto = new SCSDKPhotoSnapContent(photo)

SCSDKSnapAPI api = new SCSDKSnapAPI(snapPhoto);
api.StartSnappingWithCompletionHandler((NSError error) =>
{
    // Error handling
});

问题是 SCSDKSnapAPI 构造函数仅接受 SCSDKSnapContent(这是一个抽象类),而不接受其实现,并且我在调用它时遇到错误:

CS1503 Argument 1: cannot convert from 'SCSDKCreativeKit_Bindings.SCSDKPhotoSnapContent' to 'SCSDKCreativeKit_Bindings.SCSDKSnapContent'

编辑:

ApiDefinition.cs

[Export("initWithContent:")]
IntPtr Constructor(SCSDKSnapContent content);

我尝试添加另一个构造函数,如下所示:

[Export("initWithContent:SCSDKPhotoSnapContent")]
IntPtr Constructor(SCSDKPhtotoSnapContent content);

代码现已构建,但我在回调时收到来自 SnapChat 的以下错误代码:

SnapEncryptionMetadataUnexpectedStatusCode

最佳答案

我找不到在 Xamarin.iOS 中正确实现 SCSDKSnapContent 的方法。我确实找到了一种解决方法,确实有效。如果将绑定(bind)库中 SCSDKSnapAPI 的构造函数从 SCSDKSnapContent 更改为其实现之一(在我的例子中为 SCSDKPhotoSnapContent),如下所示:

[Export("initWithContent:")]
IntPtr Constructor(SCSDKPhotoSnapContent content);

然后您就可以在 Xamarin 中正确调用 SCSDKSnapAPI

var snapImage = GetCurrentScreenImage();
SCSDKSnapPhoto photo = new SCSDKSnapPhoto(snapImage);
SCSDKPhotoSnapContent snapPhoto = new SCSDKPhotoSnapContent(photo)

SCSDKSnapAPI api = new SCSDKSnapAPI(snapPhoto);
api.StartSnappingWithCompletionHandler((NSError error) =>
{
    // Error handling
});

关于C# 绑定(bind)库方法不接受实现参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52079839/

相关文章:

c# - 折叠面板 JavaScript 问题

c# - 基于列以编程方式在共享点中创建 TreeView

c# - asp.net 按钮 OnClick 事件未触发

c# - 正确中止或取消 PostAsync

c# - 无法在 Xamarin.iOS 应用上启用 AppCenter.Crashes

c# - 是否可以在 My Sql 数据库中保存文件指针?

Azure 通知中心 : What is Success and Failure Property in NotificationOutcome

android - 使用 .GetMapAsync 而不是 .getMap 方法与 Google Play 服务 (Xamarin)

xamarin.ios - 找不到 ViewController::.ctor(System.IntPtr) 的构造函数

ios - Xamarin UITableView 不会滚动