【问题标题】:System.MemberAccessException: Cannot create an instance of UserNotifications.UNNotificationTrigger because it is an abstract classSystem.MemberAccessException:无法创建 UserNotifications.UNNotificationTrigger 的实例,因为它是一个抽象类
【发布时间】:2018-10-08 22:12:16
【问题描述】:

我正在使用最新的通知框架 UNUserNotificationCenter 来安排本地通知。

我正在分享一些代码 sn-ps,我指的是触发器/访问触发器。 不要按顺序阅读。这只是我读取或修改触发器的代码 sn-ps

var trigger = UNCalendarNotificationTrigger.CreateTrigger(notification.ScheduledTime.DateTimeToNSDateComponents(), false);

trigger.DateComponents.Hour = trigger.DateComponents.Hour + 7;

var trigger = (UNCalendarNotificationTrigger)(notification.Trigger);

这没有任何编译错误,并且通知也有效。我们在过去几个月的应用商店中有此代码。迟到了,我们看到了以下消息的崩溃。我没有在我的代码中引用 UNNotificationTrigger。顺便说一句,这是 xamarin IOS 应用程序。

System.MemberAccessException:无法创建 UserNotifications.UNNotificationTrigger 的实例,因为它是一个抽象类

【问题讨论】:

  • 查看堆栈跟踪;异常发生在哪一行?
  • 你有没有象征性的崩溃?
  • mono_handle_exception_internal mini-exceptions.c - 第 2313 行 System.MemberAccessException:无法创建 UserNotifications.UNNotificationTrigger 的实例,因为它是一个抽象类。是我在崩溃日志中看到的
  • @SushiHangover 是的。它是象征性的
  • 您需要查找堆栈以查看调用构造函数的位置。为什么要将触发器投射到UNCalendarNoticicationTrigger?这是 C# 的事情吗?该类型本质上是未知的吗?

标签: ios xamarin xamarin.ios


【解决方案1】:

这是我们正在寻求解决的 Xamarin.iOS 中的一个问题。

发生的情况是trigger 在某个时候消失或被收集,后来又重新浮出水面,而重新浮出水面并不知道实际隐藏的具体实现,因此您会收到上述消息。

目前最好的解决方法是在托管代码中保持指向trigger 的指针处于活动状态,从而确保永远不会触发重铺。

我们正在这里跟踪:

https://github.com/xamarin/xamarin-macios/issues/3935#issuecomment-381200652

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 2019-03-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    相关资源
    最近更新 更多