私はこの問題を抱えています:これは、「performSelectorInBackground」メソッドを作成する appDelegate ファイルの一部です。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self addSplash];
[self getLocation];
[self performSelectorInBackground:@selector(backgroundOp) withObject:nil];
return YES;
}
まず、スプラッシュ スクリーンを追加し、場所を取得してバックグラウンド メソッドを呼び出します。これはバックグラウンド メソッドの内容です。
- (void) backgroundOp
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self createEditableCopyOfDatabaseIfNeeded];
[self initTempData];
[self initApp];
[self checkDataVersion];
}
[self setAppStrings];
[self performSelectorOnMainThread:@selector(resultOp) withObject:nil waitUntilDone:YES];
[pool release];
}
データをダウンロードし、データのバージョンを確認し、アプリケーションの文字列を設定し、メイン スレッド メソッドを呼び出して、ここでタブ バー コントローラー コードを作成します。
- (void) resultOp
{
tabBarController.delegate = self;
[self.window addSubview:tabBarController.view];
[self addTabBarArrow];
[self.window makeKeyAndVisible];
[self removeSplash];
}
ここでは、タブ バー コントローラーを作成し、スプラッシュ スクリーンを削除します。次に、firstViewController を開始します。
問題は、私の firstViewController で現在の場所を表示することですが、それは間違っています。正しいこともありますが、間違っていることもよくあります。どこに問題がありますか? バックグラウンドスレッドが終了したかどうかを確認する方法はありますか? または、私の問題に対する他の解決策(必要なのは、アクティビティインジケーターといくつかのメッセージを含むスプラッシュを表示することだけです(このメッセージは、init、get locationなどのメソッドで変更されます)。次に、場所を取得し、スプラッシュを削除し、firstViewControllerを表示する必要があります)。 .. どうもありがとう
編集:ここに場所のコードがあります:
- (void) getLocation
{
splashScreenController.splashLabel.text = @"Localization ...";
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kDistanceFilter;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];
}