c# - 从使用 Xamarin 创建的 iOS 应用程序调用 Azure 认知服务时出现 Foundation.MonoTouchException
问题描述
我正在使用 C# SDK调用认知服务图像分析器功能。C# 脚本本身运行良好。但是当我从Xamarin 在 C# 中构建的 iOS 应用程序中调用它时,我Foundation.MonoTouchException
在运行时遇到了问题。我认为下面的细节应该有助于更好地理解问题。
这就是 Viewcontroller.cs 的样子:
using System;
using UIKit;
namespace colors
{
public partial class ViewController : UIViewController
{
public ViewController(IntPtr handle) : base(handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
string list_of_colors = "";
getColor.TouchUpInside += async (object sender, EventArgs e) => {
// Convert the phone number with text to a number
// using PhoneTranslator.cs
list_of_colors = await ApiCall.AnalyzeImageUrl(
URLholder.Text);
display.Text = list_of_colors;
};
}
public override void DidReceiveMemoryWarning()
{
base.DidReceiveMemoryWarning();
// Release any cached data, images, etc that aren't in use.
}
}
}
这是 apiCall.cs 的样子:
using System;
using System.Collections.Generic;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Threading;
using System.Linq;
namespace colors
{
public static class ApiCall
{
/*
* AUTHENTICATE
* Creates a Computer Vision client used by each example.
*/
public static ComputerVisionClient Authenticate(string endpoint, string key)
{
ComputerVisionClient client =
new ComputerVisionClient(new ApiKeyServiceClientCredentials(key))
{ Endpoint = endpoint };
return client;
}
public static async Task<string> AnalyzeImageUrl(string raw)
{
// Add your Computer Vision subscription key and endpoint to your environment variables.
// Close/reopen your project for them to take effect.
string subscriptionKey = "COMPUTER_VISION_SUBSCRIPTION_KEY";
string endpoint = "COMPUTER_VISION_ENDPOINT";
// Create a client
ComputerVisionClient client = Authenticate(endpoint, subscriptionKey);
IList<VisualFeatureTypes> features = new List<VisualFeatureTypes>()
{
VisualFeatureTypes.Color
};
Console.WriteLine($"Analyzing the image {Path.GetFileName(raw)}...");
Console.WriteLine();
// Analyze the URL image
ImageAnalysis results = await client.AnalyzeImageAsync(raw, features);
return string.Join(",", results.Color.DominantColors);
}
}
}
这篇文章是最接近我能找到的解决方案,但没有帮助。我不喜欢这种访问 azure 认知服务的方法。如果可用,我愿意接受在 iOS 应用程序中访问 Azure 认知服务的其他方法。但这是首选。
这是我第一次尝试使用 iOS 应用程序和 C#,请放轻松。
编辑:这是堆栈跟踪。
eason: -[ViewController GetColor_TouchUpInside:]: unrecognized selector sent to instance 0x7fc1d0d10540
Native stack trace:
0 CoreFoundation 0x00007fff23e3de6e __exceptionPreprocess + 350
1 libobjc.A.dylib 0x00007fff512539b2 objc_exception_throw + 48
2 CoreFoundation 0x00007fff23e5eb94 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 UIKitCore 0x00007fff49354af0 -[UIResponder doesNotRecognizeSelector:] + 302
4 CoreFoundation 0x00007fff23e4286c ___forwarding___ + 1436
5 CoreFoundation 0x00007fff23e44b58 _CF_forwarding_prep_0 + 120
6 UIKitCore 0x00007fff49326c1d -[UIApplication sendAction:to:from:forEvent:] + 83
7 UIKitCore 0x00007fff48cd5baa -[UIControl sendAction:to:forEvent:] + 223
8 UIKitCore 0x00007fff48cd5ef2 -[UIControl _sendActionsForEvents:withEvent:] + 396
9 UIKitCore 0x00007fff48cd4e63 -[UIControl touchesEnded:withEvent:] + 497
10 UIKitCore 0x00007fff49362508 -[UIWindow _sendTouchesForEvent:] + 1359
11 UIKitCore 0x00007fff4936428d -[UIWindow sendEvent:] + 4501
12 UIKitCore 0x00007fff4933e6d1 -[UIApplication sendEvent:] + 356
13 UIKitCore 0x00007fff493c94ce __dispatchPreprocessedEventFromEventQueue + 7628
14 UIKitCore 0x00007fff493cc692 __handleEventQueueInternal + 6584
15 UIKitCore 0x00007fff493c2f35 __handleHIDEventFetcherDrain + 88
16 CoreFoundation 0x00007fff23da1c91 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
17 CoreFoundation 0x00007fff23da1bbc __CFRunLoopDoSource0 + 76
18 CoreFoundation 0x00007fff23da1394 __CFRunLoopDoSources0 + 180
19 CoreFoundation 0x00007fff23d9bf8e __CFRunLoopRun + 974
20 CoreFoundation 0x00007fff23d9b8a4 CFRunLoopRunSpecific + 404
21 GraphicsServices 0x00007fff38c39bbe GSEventRunModal + 139
22 UIKitCore 0x00007fff49325968 UIApplicationMain + 1605
23 ??? 0x00000001112e5035 0x0 + 4583215157
24 ??? 0x00000001112e4d83 0x0 + 4583214467
25 ??? 0x00000001106f8943 0x0 + 4570712387
26 colors 0x000000010ab8b2b1 mono_jit_runtime_invoke + 1569
27 colors 0x000000010aca3e48 mono_runtime_invoke_checked + 136
28 colors 0x000000010aca92c5 mono_runtime_exec_main_checked + 117
29 colors 0x000000010aaf718c mono_jit_exec + 364
30 colors 0x000000010ada2ccd xamarin_main + 2685
31 colors 0x
@Jason 请求的堆栈跟踪
解决方案
推荐阅读
- javascript - 具体 HTML 类的 JavaScript querySelector
- python - 应用于基于另一个数据帧中的字段填充数据帧
- c++ - 在查找表中存储命名项目
- ruby-on-rails - Rails:将年份添加到 2 月 29 日
- ios - DispatchQueue.main.async 的初学者问题
- html - fs.readFile() 返回未定义
- python - 如何修复python中的断管错误?(在 IRC 客户端上工作)
- angular - 如何从请求标头中删除自定义值?
- c# - CreateNoWindow = true; 不隐藏窗口
- uwp - 透视 XAML 控件 - 更改样式(边框)