appControllerのプロパティであるCLLocationManagerオブジェクトに、appDelegateがアプリケーションがバックグラウンドで入力し、私の問題が私のappDelegateクラス内のviewControllerオブジェクトを参照する方法がわかりません。appcontrol内のviewcontrollerオブジェクトへのポインタを取得する方法
答えて
あなたが間違ったアプローチをしているようです。ロケーションマネージャはビューコントローラ上のインスタンス変数であるため、ビューコントローラは、アプリケーションデリゲートではなく、停止するように指示する必要があります。
これは、Cocoa/UIKit/Objective-Cが動作するように設計された方法で、他のものは上り坂です。
おそらくあなたのViewControllerでこのような何か:
@implementation MyViewController
- (id)init
{
...
self.locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
...
}
- (void)dealloc
{
[self.locationManager stopUpdatingLocation];
[[NSNotificationCenter defaultCenter] removeObserver:self];
...
}
- (void)applicationWillEnterForeground:(NSNotification *)notif
{
[self.locationManager startUpdatingLocation];
}
- (void)applicationDidEnterBackground:(NSNotification *)notif
{
[self.locationManager stopUpdatingLocation];
}
@end
しかし、あなたのビューコントローラ内からアプリデリゲートにアクセスするためにこれを使用することができ、あなたの特定の質問に答えるために:
意志[UIApplication sharedApplication].delegate
View Controllerについて説明しましょう。しかし、これを行うメモリリークを作成する可能性があるので注意してください!
デリゲートがビューコントローラを保持していないことを確認する必要があります。そうしないと、割り当てが解除されません。また、ビューコントローラの割り当てを解除するときに、ビューコントローラへのデリゲートの参照がnilに設定されていることを確認する必要があります。
一般に、特定のビューコントローラについて、アプリケーションデリゲートが何も知らないようにする必要があります。
アプリケーションがバックグラウンドを入力しようとしているときに、viewWillDisappearデリゲートメソッドがviewcontrollerで呼び出されていませんか?
いいえ...私はそこに持っていたいと思っています...役に立つでしょう – Mppl
- 1. C++ - ベクトルへの内部ポインタを取得
- 2. オブジェクトへのポインタを返す方法は?
- 3. C++でファイルの先頭へのポインタを取得する方法
- 4. ページの先頭へのポインタを取得する方法
- 5. memcpyのメンバ変数へのポインタを取得する方法
- 6. オブジェクトへの既存のポインタをすべて取得する
- 7. このオブジェクトのポインタを取得する方法。 (初心者)
- 8. スタックからオブジェクトへのポインタを取得する
- 9. id変数とNSObjectポインタへのポインタを取得する方法は?
- 10. ポインタのアドレスに基づいてポインタの内容を取得する方法
- 11. ポインタから単一オブジェクトへのポインタへのポインタの再クローズ方法
- 12. dladdr:ポインタへのポインタ対オブジェクトへのポインタ
- 13. SWIGとJava:Javaへのオブジェクト出力パラメータへのポインタへのC++ポインタのマッピング方法
- 14. ポインタからメンバーへのポインタを含む構造体へのポインタの取得方法は?
- 15. オブジェクトをオブジェクトの内部で取得する方法は?
- 16. アトリビュートから他のオブジェクトへのアクセスを取得する方法
- 17. Amazon SimpleDBのS3オブジェクトへのポインタを格納する方法は?
- 18. CCommand CAccessorからオブジェクトへのポインタ/参照を取得したい
- 19. ポインタへのポインタを指す方法
- 20. 構造体のインスタンスへのポインタのメンバーを取得する方法は?
- 21. jnaの構造体の配列へのポインタを取得する方法
- 22. そのスライスへのポインタを使用してスライスアイテムを取得する方法
- 23. 取得する方法のIphoneのViewControllerのサイズをプログラム
- 24. 他のオブジェクトがシングルトンへのポインタを取得する有効な方法は何ですか?
- 25. Ember.js:Appオブジェクトからストアへのアクセスを取得する方法
- 26. Pythonでオブジェクトへの参照を取得する方法
- 27. Swiftの前のviewControllerへの参照を取得するには?
- 28. ウィンドウのピクセルへのポインタを取得
- 29. オブジェクトとそのメンバーのアドレスからメンバへのポインタを取得する
- 30. テンプレート内の要素への参照を取得する方法
あなたの助けに感謝しますが、私の質問は逆です。私はappdeidenterbackgroundメソッドが呼び出されたときに私のviewcontrolerにメッセージを送ることができるようにappdelegateの中で私のviewControllerを参照する方法が必要です。あなたが投稿したコードはうまくいくと思うが、appcontrollerのメッセージがappdelegateに送られたことをviewcontrollerに伝えるappdelegateからviewcontrollerにメッセージを送る方が簡単だろう。ありがとうございました – Mppl
あなたのビューコントローラは、コントローラに関する情報を伝えるためにアプリケーションデリゲートにメッセージを送信する必要があります。例: '[UIApplication sharedApplication] .delegate.myViewController = self;'そうしなければ、メモリリークやクラッシュにつながるでしょう。あなたの質問でなぜ説明するか)。 –
理由はシンプルです。私のviewcontrollerにCLLocationManagerのインスタンスがあり、ビューのロード時にstartupdatinglocationが必要なので、いくつかの時間に停止するように指示する必要があります。他のデリゲートメソッドviewcontrollerにはviewdidunloadがありますが、私はappULLterminateメソッド(私のappdelegateで実装されている)内のCLLocationmanagerインスタンスを何とか参照して、stopUpdatingLocationに伝える必要があるので、アプリケーションがバックグラウンドに入ると位置の更新を停止したくありません。 – Mppl