ホストアプリケーションをパラメータで開くには、自分のアプリケーション拡張が必要です。私はカスタムURL
をUIApplication.shared
で開きます。複数のパラメータを持つ関数のセレクタ
今すぐ。私の最後のビルドは、テストフライトでメッセージ"Need test for export compliance"
またはそのようなもので拒否されました(iTunes接続は英語で実行したくありません)。だから、がBuild Settings
のNO
に設定されていると考えられます。
フラグをYES
に設定すると、UIApplication.shared
の使用が無効になります。
// 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];
}
は、あなたが見ることができるように、これはObjective-C
ですが、私もそれを行う必要があります。だから私は(残念ながら、レコードを見つけることができません)私はいくつかの時間前にここで見つける古い方法を使うことにしましたSwifty
。
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)
...
問題がsel
(予想表現)である:私はこだわっているところ だからここにあります。私はここに参照しようとしている方法は、このこと
#selector(open(_:options:completionHandler:))
は、私はそのようなメソッドを持っていないで、このコードを実装していますビューコントローラいるので(未解決の識別子を使用)のいずれかを動作しません
open(_:options:completionHandler:)
です。
質問:後でmeth
オブジェクトで使用するいくつかのパラメータを持つ名前のないセレクタ参照を作成するにはどうすればよいですか?ありがとう。
...私は 'meth'は変数の良い名前だとは思わない。 – the4kman
@ the4kman後でテキストを再構成します。コードが機能しない場合、変数の名前は関係ありません。 –