ストーリーボードを使用してアプリを作成しています。最初の画面にはテーブルビューの曲のリストがあり、その曲を次のビューに渡します(これを音楽プレーヤーと呼びます)。私はこれを達成することができますが、音楽プレーヤーが音楽を再生している間、さまざまな運動統計を追跡するために音楽プレーヤーも必要です。
問題は、音楽プレーヤーに入って曲リストビューに戻り、セルをもう一度選択すると、音楽プレーヤーのまったく新しいインスタンスが作成されることです。これは、新しいタイマーを作成し、すべての運動統計を失うため、問題があります。また、タイマーが起動し続けるため、元の音楽プレーヤーインスタンスがまだ存在していることもわかりました。
音楽プレーヤーのインスタンスが1つだけ表示され続けるようにするためにできることはありますか?
これが私の現在のコードです(実行順に):
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
self.nextScreen = [segue destinationViewController];
}
^これにより、次の画面がメンバー変数として格納されます。prepareForSeque:
前に呼び出さdidSelectRowAtIndexPath:
れ、次のビューでデータを設定する必要があるため、これを行う必要があります。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
self.nextScreen.currentSong = [self.allSongs objectAtIndex:indexPath.row];
}
^これは曲を設定するだけです。
次に、で必要に応じて次のビューを設定しviewDidLoad:
ます。
これを修正するためのトリックはありますか?そうでない場合、これを回避する方法について何か提案はありますか?回避策の1つは、ある種のシングルトンを設定する必要があることだと思います。データを頻繁にリセットする必要があるため、それが最善のオプションかどうかはわかりません。
ありがとう!