現在、データを収集している間もユーザーがアプリケーションをナビゲートできるように、一定期間バックグラウンドでプロセスを実行しようとしています。これにはGCDを利用する必要があることがわかりました。arrayBuild
ただし、バックグラウンド キューでも実行する方法がわかりません。
これをバックグラウンド キューに追加するにはどうすればよいですか? dispatch_async への参照が削除されると、アプリケーションは正常に動作するため、スレッドに問題があることがわかります。
- (IBAction)buttonPressed:(id)sender {
dispatch_async(backgroundQueue, ^{
manager.delegate = self;
manager.desiredAccuracy = kCLLocationAccuracyBest;
/* Removed for testing
[manager startUpdatingLocation];
*/
// TEST
myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(arrayBuild)
userInfo:nil
repeats:YES];
// Initialise Array
resultsArray = [[NSMutableArray alloc]init];
// END TEST
});
}
- (void)arrayBuild {
loopCount++;
if (loopCount >= 11) {
// Invalidate Timer
[myTimer invalidate];
myTimer = nil;
// Find Average
NSNumber *avg = [resultsArray valueForKeyPath:@"@avg.self"];
// Change Text of Label to Average & Log
self.signal.text = [NSString stringWithFormat:@"%@",avg];
NSLog(@"%@",avg);
}else{
// Declare Signal Strength
float signalstrength = CTGetSignalStrength();
// Individual Result & Convert to Integer
NSString *result = [NSString stringWithFormat:@"%f", signalstrength];
NSInteger resultInt = [result integerValue];
// Add Object
[resultsArray addObject:[NSNumber numberWithFloat:resultInt]];
// Change Text of Label Each Second
self.signal.text = [NSString stringWithFormat:@"%d",loopCount];
NSLog(@"%f",signalstrength);
}
}