0

これを説明する最も簡単な方法は、テストアプリをアップロードすることです。そこで、不要なものをすべて取り除き、必要最低限​​のプロジェクトをSendSpaceにアップロードしました。

http://www.sendspace.com/file/z86g0z

「plasma://hello-world」のようなモバイルサファリからカスタムURLを受け取るアプリを書いています。これらは私のアプリによって処理され、画面に通知が表示されます。

テストアプリでは、メインクラスはシングルトンであり、「テスト」ボタンがあります。これは、URLを介して開いたときに何が起こるかを示しています。画面のラベルにカスタムリンクが表示され、上部に緑色の通知ラベルが表示され、その後フェードアウトします。このプロセス中に、Xcodeコンソールはこれを表示します....。

2012-09-05 21:53:29.719 PlasmaLinker[2866:f803] Link: plasma:Test+Link
2012-09-05 21:53:29.778 PlasmaLinker[2866:f803] Show Alert: Success - Link Received
2012-09-05 21:53:35.779 PlasmaLinker[2866:f803] Remove Alert

すべて正常に動作します。

ここで、「plasma:// hello-world」と入力してモバイルSafariから起動します。Enterキーを押すと、Safariがアプリに切り替わります。コンソールには、まったく同じ出力が表示されます(起動したURLに関係なく)が、何も表示されません。 UIで。リンクはテキストボックスに配置されず、通知は表示されません。

私は何が間違っているのですか?URLを使用して起動した後、もう一度テストボタンをクリックして、UI要素が必要に応じて変更されることを確認できます。それは私を狂わせますが、URLによって起動されたときにそれを機能させることができるのに十分なことを私は知りません。誰かがこれに光を当ててくれませんか?

敬具

プラズマ

4

1 に答える 1

1

を取得するシングルトン メソッドはPlasmaLinker_ViewController、ストーリーボードによって作成され、メイン ウィンドウに追加されたインスタンスとは異なるインスタンスを返しています。

機能する1つの例(アプリデリゲート内)

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

    NSString *link = [NSString stringWithFormat:@"%@",url];
    vc = (PlasmaLinker_ViewController*) self.window.rootViewController;
    [vc processLink:link];

    return YES;

}

別のオプションは、View Controller をオーバーライドし-(id)initWithCoder:(NSCoder *)decoder、共有インスタンスをselfそのメソッドに設定することです。

+ (PlasmaLinker_ViewController *) sharedInstance
{
    return _sharedInstance;
}

-(id)initWithCoder:(NSCoder *)decoder {

    NSLog(@"In initWithCoder!");
    if (!_sharedInstance) {
        if (self = [super initWithCoder:decoder]) {
            _sharedInstance = self;
        }
    }
    return _sharedInstance;
}
于 2012-09-10T08:17:58.737 に答える