【问题标题】:C# Bound library method doesn't accept implementation parameterC# 绑定库方法不接受实现参数
【发布时间】:2018-08-29 14:24:56
【问题描述】:

为了在 Xamarin.iOS 中实现新的 SnapChat 创意工具包,我使用 Objective Sharpie 绑定了 SDK 框架。在遵循其他 SDK 的官方文档(仅包含 swift 和 obj-c 的实施步骤)时,这不是问题 - 我成功实现了登录工具包 - 在尝试将内容发送到 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 是 SCSDKSnapContent 协议的实现。它提供了一种对照片 Snap 进行建模以共享到 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 参数 1:无法从“SCSDKCreativeKit_Bindings.SCSDKPhotoSnapContent”转换为“SCSDKCreativeKit_Bindings.SCSDKSnapContent”

编辑:

ApiDefinition.cs

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

我尝试像这样添加另一个构造函数:

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

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

SnapEncryptionMetadataUnexpectedStatusCode

【问题讨论】:

  • 能否提供ApiDefinition.cs中的代码?
  • 添加了构造函数代码。如果需要更多信息,请告诉我。

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


【解决方案1】:

我找不到在 Xamarin.iOS 中正确实现 SCSDKSnapContent 的方法。我确实找到了一种解决方法,那种工作。如果您将绑定库中 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
});

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2010-11-17
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多