問題タブ [uiapplicationdelegate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
169 参照

iphone - オブジェクトはメイン アプリケーションを呼び出すことができますか?

これはおそらく専門家にとって非常に単純な問題ですが、私はこの言語に不慣れです。

メイン ウィンドウに表示される一連のビューを動的に生成および解放するアプリケーションを作成しようとしています。私が抱えている問題は、それらの間で交換することです。各ビューに、ビューを変更するボタンを含めたい。ビューを自分で閉じることはできますが、メイン プログラムが完了したらビューを新しいものに変更するように命令する方法がわかりません (つまり、子オブジェクトの 1 つからメイン アプリケーションにメッセージを送ります)。アプリケーションのメイン ビューをグローバルにすることもできると思いますが、メイン アプリケーションに直接アクセスできるようにした方が、すっきりしていて、他の問題が発生しにくいと思うからです。問題は、メイン アプリの識別子がわからないことです。便利な「自己」識別子は頻繁に使用されるため、外部から呼び出すことができるメイン アプリケーションの識別子を含むコード スニペットを見たことがありません。また、NIB ファイル オブジェクトを、メイン プログラムによって共通に保持されている属性に直接リンクできると便利です。

私はこれについて完全に間違った方法で行っていますか? 一般的な「メインアプリ」識別子はありますか? 自動的に生成されない場合、作成することはできますか?

-灰

0 投票する
4 に答える
33189 参照

ios - 終了/一時停止時の重要な変更場所APIの動作?

これは、startMonitoringSignificantLocationChangesを使用したアプリの動作を説明するCLLocationManagerドキュメントのセクションです。

このサービスを開始し、その後アプリケーションが終了した場合、新しいイベントが到着すると、システムは自動的にアプリケーションをバックグラウンドで再起動します。このような場合、アプリケーションデリゲートのapplication:didFinishLaunchingWithOptions:メソッドに渡されるオプションディクショナリには、ロケーションイベントが原因でアプリケーションが起動されたことを示すキーUIApplicationLaunchOptionsLocationKeyが含まれています。再起動時に、ロケーションマネージャオブジェクトを設定し、このメソッドを呼び出してロケーションイベントの受信を継続する必要があります。位置情報サービスを再開すると、現在のイベントがすぐに代理人に配信されます。さらに、ロケーションマネージャオブジェクトのロケーションプロパティには、ロケーションサービスを開始する前でも、最新のロケーションオブジェクトが入力されます。

したがって、私の理解では、アプリが終了した場合(そして、applicationWillTerminateからstopMonitoringSignificantLocationChangesを呼び出さなかった場合application :didFinishLaunchingWithOptionsへのUIApplicationLaunchOptionsLocationKeyパラメーターでウェイクアップされます。その時点で、CLLocationManagerを作成し、 startMonitoringSignificantLocationChangesを呼び出して、限られた時間だけバックグラウンドロケーション処理を実行します。だから私はこのビットで大丈夫です。

前の段落では、アプリが終了したときに何が起こるかについてのみ説明しており、アプリケーションが一時停止されたときに何をするかについては示唆していません。didFinishLaunchingWithOptionsのドキュメントには次のように書かれています。

アプリケーションはバックグラウンドで位置の更新を追跡し、パージされ、再起動されました。この場合、ディクショナリには、新しいロケーションイベントが原因でアプリケーションが再起動されたことを示すキーが含まれています。

この呼び出しは、終了後にアプリが起動されたとき(場所が変更されたため)にのみ受信されることを提案します。

ただし、ロケーション認識プログラミングガイドの重要な変更サービスに関する段落には、次のように記載されています。

このサービスを実行したままにして、アプリケーションがその後一時停止または終了した場合、新しい位置データが到着すると、サービスはアプリケーションを自動的にウェイクアップします。ウェイクアップ時に、アプリケーションはバックグラウンドに置かれ、位置データを処理するために少し時間が与えられます。アプリケーションはバックグラウンドにあるため、最小限の作業を実行し、割り当てられた時間が経過する前にアプリケーションが戻るのを妨げる可能性のあるタスク(ネットワークのクエリなど)を回避する必要があります。そうでない場合、アプリケーションが終了する可能性があります。

これは、アプリが一時停止されている場合に位置データで目覚めていることを示していますが、どのように目覚めているのかについては言及していません。

  • UIApplicationDelegateは、一時停止状態からバックグラウンド状態に再開していることを通知するコールバックを受け取りますか
  • ロケーションマネージャー(アプリが一時停止されたときにフリーズドライされた)は、locationManager:didUpdateToLocation:fromLocationコールバックの受信を開始しますか?
  • アプリケーションの状態をチェックし、バックグラウンドモードの場合は最小限の処理を実行するdidUpdateToLocationメッセージにコードを実装する必要がありますか?

これを書いている過程で、私は自分の質問に答えたばかりかもしれませんが、これについての私の理解をもっと知識のある人に確認してもらうのは素晴らしいことです。

0 投票する
2 に答える
2093 参照

iphone - プログラム全体でUIApplicationDelegateを使用するにはどうすればよいですか?

電話の進行中など、ステータスバーの高さがいつ変わるか知りたいです。そこで、UIApplicationDelegateに次のように入力します。

実際、アプリケーションの任意の画面からシミュレーターの通話中ステータスバーを切り替えると、メッセージがコンソールに表示されますが、ダブルハイトステータスなので、別のクラスのuitextfieldまたは2を移動する必要があります。バーは特に1つの画面を台無しにしています。この画面での自動サイズ変更はうまくいきませんでした。

だから私の質問は、AppDelegateのこのメソッドから1つの画面と1つの画面のコードを実装するにはどうすればよいですか?すべての画面で起動しますが、必要なのは1つだけです。理想的には、1つのクラスのメソッドのみを起動したいと思います。

0 投票する
2 に答える
5812 参照

iphone - パスワード画面にapplicationwillenterforegroundを使用する

iOS4より前は、私のアプリの初期ビューコントローラーはviewWillAppearでパスコードのオン/オフ設定変数をチェックし、オンに設定されている場合は、正しいパスコードが入力されるかホームボタンが押されるまでそこにとどまるモーダルパスコード画面を表示していました。

iOS4では、私のアプリがバックグラウンドにある場合、ユーザーが自分の携帯電話を誰かに渡して使用する場合、アプリに含まれるデータに簡単にアクセスできないことをユーザーに安心してもらいたいと思います。

アプリは任意の画面(アプリが最後に表示された画面)に戻る可能性があるため、ローカルセレクター(重複するenterPasscodeメソッド)を使用して、UIApplicationWillEnterForegroundNotificationをあらゆる場所で使用し、それぞれに正しいビューコントローラーを使用してプッシュすることにしました。ローカル画面ですが、もっと良い方法が必要です。

ここで少し概念的な誤解があるかもしれません。誰かが別のアプローチを提案したり、次のステップに沿って私を動かしたりできますか?これを共有メソッドとして使用できますが、プッシュする正しいローカルビューコントローラーを知っていますか?

ありがとう

編集/更新:

短いバージョン:それは動作しますが、それでもより良い方法があるかもしれません(どんな助けもありがたいです)...

ビューコントローラを使用して標準のシングルトンを作成しました。

PasscodeView.hには以下が含まれます:

PasscodeView.mには以下が含まれます:

私はこれをAppDelegateに入れました:

そして、すべてのviewDidLoadで、各画面に移動したときに現在のView Controllerを更新します(2行だけですが、それでもより良い方法があるようです)。

applicationWillEnterForegroundから現在のViewControllerを取得する方法があればいいのにと思いますが、見つかりませんでした。ここでのヘルプは引き続きありがたいです。

一貫性を保つために、行を変更し、行を追加して、アプリの他の部分と一致するナビゲーションバーを取得し、タイトルを含めました。

0 投票する
1 に答える
492 参照

iphone - iPhone DropBox App Like の実装 - タブバーを反転してログイン画面を表示する

ログイン画面をモーダルに表示する必要があり、アプリにタブバーがあるアプリケーションを作成しています。

タブバーを UIWindow に直接追加しました。新しいビュー (ログイン ビュー) に切り替えるには、applicationDidFinishLaunching をオーバーライドして、ユーザーがログイン資格情報を持っているかどうかを確認し、それ以外の場合はログイン画面を表示しません (初回使用またはログアウトの場合を想定して) ログイン画面をモーダルに表示します。アプリ内の設定タブでログアウトのオプションを提供しました。

[[UIApplication sharedApplication] delegate] 呼び出しを使用して、ユーザーが初めてログインしたときにアプリ デリゲートのインスタンスを取得しています。このようにして、Application Delegate の一部である tabBarController にアクセスできます (ほとんどの場合)。ただし、設定のログアウト オプションから loginViewController を呼び出そうとすると (将来のライフ サイクルのどこかで)、同じ [[UIApplication sharedApplication] delegate] を呼び出すと、メソッドを使用できないデリゲートが返されます。定義しました。実行時に「認識されないセレクターがインスタンスに送信されました」というエラーが表示されます。

[[UIApplication sharedApplication] delegate] の呼び出しが正確に何を返すかを理解する必要がありますか? 返されるデリゲート オブジェクトは、アプリケーションのライフ サイクルの期間中に変更されますか? それとも、アプリのライフ サイクル全体を通してシングルトン インスタンスですか?

次に、これを解決するために、タブバーを UIWindow に直接追加するのではなく、ビュー (メインウィンドウに含まれる) に追加する必要があります (タブバーアプリケーションのテンプレートで行われ、標準的な方法のようです)。このアプローチには既知の問題がありますか、それとも問題ありませんか。誰もこれを試しましたか?私にお知らせください。

ありがとうございます。

0 投票する
3 に答える
1927 参照

iphone - UiApplicationDelegateプロトコルをサブクラス化することは可能ですか?

正直、どう呼べばいいのかわからないので、説明してみます。

UIApplicationDelegateプロトコルには「application:handleOpenURL:」メソッドがあります。そして、このメソッドをApplicationDelegateクラスに実装すると、誰かが私のURLを開いたときに呼び出されます。

詳細: http ://developer.apple.com/iphone/library/documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:handleOpenURL :

ただし、他のクラス(uiviewcontroller)にこの呼び出しを受信させたいのですが。別の例を示すために、いくつかのクラスを作成し、それぞれがGPS位置を取得できます。UIApplicationDelegateプロトコルで同じことを行うことは可能ですか?

ここでこのトピックをたくさん検索しましたが、その方法についての答えは見つかりませんでした。アプリケーションデリゲート([[UIApplication sharedApplication]デリゲート])を取得する方法は知っていますが、この状況ではそうではありません。

0 投票する
2 に答える
242 参照

objective-c - 目的 C 基本的な質問

ビューベースのテンプレートを使用して簡単なアプリケーションを作成し、viewController ファイルのビュー didload メソッド内に nslog のみを配置し、( appDelegate 内の) applicationDidFinishLaunch メソッド内に nslog のみを配置して、どのクラス ファイルが最初に呼び出されたかを確認しました。

実行後: viewController 最初に実行してから appdelegate ..しかし、最初に appdelegate を実行してから、必要に応じて他のものを呼び出す必要があると思います ... plz は適切な理由を教えてください。

--i は appDelegate(inside application didFinishLaunch) で viewController (オブジェクトを作成しませんでした) を呼び出さなかったことに注意してください。私はios4を使用しています

0 投票する
3 に答える
746 参照

iphone - iPhoneアプリの初期化で複数のサービス呼び出しを行う

アプリのさまざまなコントローラーで使用されるサービスからデータを取得するには、アプリケーションデリゲートからapplication:didFinishLaunchingWithOptions:メソッドで複数の非同期サービス呼び出しを行う必要があります。私はサービスを制御でき、APIを可能な限りRESTfulになるように設計したため、アプリの初期化中に複数の呼び出しを行う必要があります。

私がやりたいのは、進行状況インジケーター付きの読み込みビュー(Default.pngのデフォルトのスプラッシュ画面に似ています)を表示し、サービス呼び出しが完了して必要な初期値が得られたら、そのビューを削除することです。これは、サービス呼び出しが1つしかない場合に非常に簡単に実行できます。これは、ロードビューを非表示にしてルートコントローラーを表示することで、そのロジックをconnectionDidFinishLoading:NSURLConnectionのデリゲートメソッドにフックできるためです。

ただし、複数のサービスコールがあると、注意が必要になります。すべてを「チェーン」して1つのリクエストを実行し、それが終了/失敗するのを待ってから、2番目のリクエストを実行し、以下同様に最後のリクエストに到達するまで続けます。最後のリクエストでは、読み込みビューを非表示にして、通常のビューを表示します。ただし、これは複数のサービスコールで扱いにくくなる可能性があり、コードを理解して従うのが難しくなります。

このための最良のアプローチに関する提案はありますか?

1つの解決策は、サービス呼び出しとアプリの初期化を担当するシングルトンクラスを用意することだと思います。シングルトンオブジェクトは、開始時に必要なすべてのリクエストを並行して起動し、各失敗/終了コールバックは、すべてのリクエストが終了したかどうかを確認します。すべてのリクエストが終了すると、アプリケーションデリゲートのメソッドを呼び出して、読み込みビューを非表示にしたり、ルートコントローラーを表示したりするように指示できます。

考え?

0 投票する
11 に答える
101023 参照

ios - applicationDidBecomeActive の処理 - 「View Controller はアプリがアクティブになるのにどのように応答できますか?」

UIApplicationDelegateメインの AppDelegate.m クラスにプロトコルがあり、メソッドがapplicationDidBecomeActive定義されています。

アプリケーションがバックグラウンドから戻ったときにメソッドを呼び出したいのですが、そのメソッドは別のビュー コントローラーにあります。メソッドで現在どのView Controllerが表示されているかを確認し、applicationDidBecomeActiveそのコントローラー内のメソッドを呼び出すにはどうすればよいですか?

0 投票する
2 に答える
3757 参照

iphone - iPhone: アプリ デリゲートから NSTimer を無効にするとアプリがクラッシュする

アプリのデリゲートから、オブジェクトを他のクラスに保存し、タイマーを無効にするメソッドを実行しようとしています。アプリが終了すると、クラスでメソッドを実行し、タイマーを保存して停止するように設定しました。

アプリのデリゲートで:

「timeRun」クラスで呼び出すメソッド:

しかし、私はクラッシュしています:

これによりアプリがクラッシュするのはなぜですか?