0

アプリで指定された ViewController に移動する必要があります。Info.plistを編集したので、Safariでscheme://と入力すると、rootViewControllerに問題なくアクセスできます。私もこれに出くわしました:

https://stackoverflow.com/a/10925872/1327809

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];
[self.viewController presentModalViewController:controller animated:YES];
[controller release];

return YES;        
}

これはまさに私が 1 つの問題でやりたいことです。私はRubyMotion(私は初めてです)を使用する必要があるため、nibファイルさえありません。

def application( application, handleOpenURL:url )
// desired code

end

ご協力ありがとうございます。さらに情報が必要な場合はお知らせください。

2012 年 6 月 14 日更新 handOpenURL
メソッドが非推奨であることがわかったので、現在はその代わりに使用しています。

黒い画面が表示される理由を一生理解できないため、コードを含めました。私はcontroller.rbからif/elseを削除し、Safariを介して、またはアプリを直接クリックして、Safariを介して、それがまだ黒だったとしても、最初のView Controllerを実行しました。これが新しい質問である必要がある場合は、お知らせください。新しい質問を開始します。

didFinishLaunchingWithOptions と openURL の両方が workFlowController メソッドを通過する必要があります。このメソッドは、controller.rb に送信し、メソッド viewWillAppear を実行します。URL を持つことで、どのビュー コントローラーが実行されるかが決まります。

app_delegate.rb に正しくコーディングされていないと思います。以下でコメントしたこと以外に、新しい openURL メソッドのコードがどのように異なるべきかわかりません。rake デバイスを実行したときにコンソールでログ (問題のメソッド内で log と puts を使用) を表示する方法はありますか? アプリを完全に終了し、Safari 経由で戻ろうとしたときにもログに記録する必要があります。Apple ドキュメントによると、「別のアプリケーションが URL リソースを開くように要求した結果としてアプリケーションが起動された場合、最初に UIApplicationアプリケーションに application:didFinishLaunchingWithOptions: メッセージを送信してから、このメソッドを呼び出します。」アプリが実行されていないときにアプリでこれが発生するかどうかを確認したいのですが、URL 経由で開きます。

どんなフィードバックでも大歓迎です。改めまして、ここまでお世話になりました。私も引き続き探します。

app_delegate.rb

class AppDelegate
...
  def application( application, didFinishLaunchingWithOptions: launchOptions )
  ...
     @window.rootViewController = self.workFlowController
  ...
  true
  end

  def application( application, openURL: url, sourceApplication: sourceApplication, annotation: annotation )

     if sourceApplication !=nil
       #should I now be using this instead of from_open_url? 
     end
     ...
     @window.rootViewController = self.WorkFlowController

     @window.rootViewController.from_open_url = true
     ...
     true
  end

  def workFlowController

     @_workFlowController ||= begin

     wfController = Auth::Controller.alloc.init

     wfController.delegate = self

     # return wf controller
     wfController

     end
  end
  ...
end

controller.rb

module Auth

  class Controller < BaseController
  ...
     attr_accessor :delegate, :from_open_url
  ...
     def viewWillAppear( animated )

        super

        # app loads from URL, password reset controller loads first
        if (@from_open_url)

           self.presentViewController( 
             self.urlController,
             animated: false 
           )       

        else 

           self.presentViewController( 
             self.otherController,
             animated: false
           )       

        end

     end
     ...
  end    
end
4

1 に答える 1

2

MyViewController.alloc.initアプリの正確な設定はわかりませんが、代わりに使用できるはずです。これが完全に機能する例です。これにより、既定の画像 (foo.png) が読み込まれますが、URL を介してアプリを開くと、別の画像 (bar.png) でモーダル ビューが表示されます。

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
    @viewController = Foo.alloc.init
    @window.rootViewController = @viewController
    @window.rootViewController.wantsFullScreenLayout = true
    @window.makeKeyAndVisible
    true
  end

  def application(application, openURL:url, sourceApplication:sourceApp, annotation:annotation)
    # Here's where you might parse the url and decide which view controller to use
    controller = Bar.alloc.init
    @viewController.presentModalViewController(controller, animated:true)
    true
  end
end

class Foo < UIViewController
  def viewDidLoad
    self.view = UIImageView.alloc.initWithImage(UIImage.imageNamed('foo.png'))
  end
end

class Bar < UIViewController
  def viewDidLoad
    self.view = UIImageView.alloc.initWithImage(UIImage.imageNamed('bar.png'))
  end
end
于 2012-06-13T14:41:28.720 に答える