在Libgdx中初始化UNNotificationAttachment类时,Objective-C初始化方法返回nil

问题描述

我正在尝试将图像附加到Libgdx项目的iOS模块中的通知中。但是在初始化UNNotificationAttachment时,我出现以下错误

2020-08-26 08:09:56.711 IOSLauncher[29001:1089461] -[NSURL init] called; this results in an NSURL instance with an empty URL string. Please use one of the documented NSURL initialization methods instead (initWithString:,initFileURLWithPath:,etc.). This message shown only once.
2020-08-26 08:10:03.864 IOSLauncher[29001:1089573] xpc connection interrupted
SLF4J: Failed to load class "org.slf4j.impl.StaticMDCBinder".
SLF4J: Defaulting to no-operation MDCAdapter implementation.
SLF4J: See http://www.slf4j.org/codes.html#no_static_mdc_binder for further details.
Exception in thread "main" java.lang.RuntimeException: Objective-C initialization method returned nil
    at org.robovm.objc.ObjCObject.initObject(ObjCObject.java:108)
    at org.robovm.objc.ObjCObject.<init>(ObjCObject.java:97)
    at org.robovm.apple.foundation.NSObject.<init>(NSObject.java:136)
    at org.robovm.apple.usernotifications.UNNotificationAttachment.<init>(UNNotificationAttachment.java:54)
    at org.robovm.apple.usernotifications.UNNotificationAttachment.<init>(UNNotificationAttachment.java:51)
    at ua.gram.munhauzen.NotificationDelegate.scheduleNotification(NotificationDelegate.java:109)
    at ua.gram.munhauzen.IOSLauncher.showNotificaiton(IOSLauncher.java:414)
    at ua.gram.munhauzen.IOSLauncher.willResignActive(IOSLauncher.java:644)
    at com.badlogic.gdx.backends.iosrobovm.IOSApplication$Delegate.$cb$applicationWillResignActive$(IOSApplication.java)
    at org.robovm.apple.uikit.UIApplication.main(Native Method)
    at org.robovm.apple.uikit.UIApplication.main(UIApplication.java:446)
    at ua.gram.munhauzen.IOSLauncher.main(IOSLauncher.java:288)

解决方法

因为错误行1明确指出: “这将导致一个带有空URL字符串的NSURL实例。请改用已记录的NSURL初始化方法之一(initWithString:,initFileURLWithPath:等)” 您可能在初始化NSURL时遇到问题。

以下是UNNotificationAttachment的工作示例:

    UNNotificationAttachment attachment = null;

    File file = new File(filePath);

    URL url = null;
    try {
        url = file.toURI().toURL();
    } catch (MalformedURLException e) {
        System.out.println("URL--------------------->" + url);
    }
    if (url != null) {
        NSURL nsURL = new NSURL(url);
        System.out.println("NSURL -------------" + nsURL);
        try {
            attachment = new UNNotificationAttachment("image",nsURL,null);
        } catch (NSErrorException e) {
            System.out.println("Attachment Error:----------------->" + e);
        }
        System.out.println("Attachment : " + attachment);
    }