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

Posted

技术标签:

【中文标题】System.MemberAccessException:无法创建 UserNotifications.UNNotificationTrigger 的实例,因为它是一个抽象类【英文标题】:System.MemberAccessException: Cannot create an instance of UserNotifications.UNNotificationTrigger because it is an abstract class 【发布时间】: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 应用程序。

【问题讨论】:

查看堆栈跟踪;异常发生在哪一行? 你有没有象征性的崩溃? mono_handle_exception_internal mini-exceptions.c - 第 2313 行 。是我在崩溃日志中看到的 @SushiHangover 是的。它是象征性的 您需要查找堆栈以查看调用构造函数的位置。为什么要将触发器投射到UNCalendarNoticicationTrigger?这是 C# 的事情吗?该类型本质上是未知的吗? 【参考方案1】:

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

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

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

我们正在这里跟踪:

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

【讨论】:

以上是关于System.MemberAccessException:无法创建 UserNotifications.UNNotificationTrigger 的实例,因为它是一个抽象类的主要内容,如果未能解决你的问题,请参考以下文章