Ich brauche meine App-Erweiterung, um meine Host-App mit einem Parameter zu öffnen. Ich mache das, indem ich eine benutzerdefinierte URL
mit UIApplication.shared
öffne.Selektor für eine Funktion mit mehreren Parametern
Jetzt. Mein letzter Build wurde im Testflug mit einer Nachricht "Need test for export compliance"
oder so ähnlich abgelehnt (iTunes connect möchte nicht auf Englisch laufen). Also ich denke, dass Require only App-Extension-Safe API
auf NO
in meiner Extension Build Settings
ist ein möglicher Grund für das Problem.
Das Setzen des Flags auf YES
deaktiviert die Verwendung von UIApplication.shared
. Also habe ich beschlossen, die alte Art und Weise zu verwenden, die ich hier vor einiger Zeit gefunden (leider nicht den Datensatz finden):
// Get "UIApplication" class name through ASCII Character codes.
NSString *className = [[NSString alloc] initWithData:[NSData dataWithBytes:(unsigned char []){0x55, 0x49, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E} length:13] encoding:NSASCIIStringEncoding];
if (NSClassFromString(className))
{
// A different way to call [UIApplication sharedApplication]
id object = [NSClassFromString(className) performSelector: @selector(sharedApplication)];
// These lines invoke selector with 3 arguements
SEL selector = @selector(openURL:options:completionHandler:);
id (*method)(id, SEL, id, id, id) = (void *)[object methodForSelector: selector];
method(object, selector, myURL, nil, nil);
// Close extension
[self.extensionContext completeRequestReturningItems: @[] completionHandler: nil];
}
Wie Sie sehen können, ist dies Objective-C
, aber ich brauche es auch zu machen Swifty
. Also hier ist, wo ich bin stecken:
let codes = [CUnsignedChar](arrayLiteral: 0x55, 0x49, 0x41, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E)
let className = String(data: Data(bytes: UnsafeRawPointer(codes), count: 13), encoding: String.Encoding.ascii) ?? ""
if NSClassFromString(className) != nil
{
let object = NSClassFromString(className)?.shared()
let sel = #selector(_:options:completionHandler:)
let meth = object?.method(for: sel)
...
Das Problem mit sel
(erwarteten Ausdruck) ist. Die Methode, die ich hier zu verweisen versuche ist
open(_:options:completionHandler:)
Das Ding
#selector(open(_:options:completionHandler:))
nicht entweder (Verwendung von ungelösten Identifier), da die View-Controller funktioniert ich diesen Code bin der Umsetzung in keine solche Methode hat.
Also die Frage ist: Wie erstelle ich eine namenlose Selektor Referenz mit ein paar Parametern, um später mit meinem meth
Objekt zu verwenden? Vielen Dank.
... Ich glaube nicht, Meth ist ein guter Name für eine Variable. – the4kman
@ the4kman Ich werde den Text später umstrukturieren. Die Namen der Variablen spielen keine Rolle, wenn der Code nicht funktioniert. –