だから、私はこの問題を抱えています.私のアプリはオーディオを再生し、ボタンをタップするか、他のトラックを選択することによって一時停止がトリガーされるたびに、再生位置を保存しました. 後者が発生した場合、プログラムで一時停止を呼び出し、次のトラックの再生を開始する前に 0.5 秒の遅延を設定します。ここで問題が発生します。
コードはとてもシンプルです。
NSInteger x = [_player currentPlaybackTime];
if (x && x > 0) {
[_nowPlaying setValue:[NSNumber numberWithInt:x] forKey:@"pausedAt"];
NSError *ctxErr;
if (![_context save:&ctxErr]) {
NSLog(@"Save error: %@", [ctxErr localizedDescription]);
}
}
(_nowPlaying は、役立つ場合は NSManagedObject です)
そして、それは行のためにクラッシュします[_nowPlaying setValue: forKey:]
そのため、環境変数に追加NSZombieEnabled
すると、ログに「Caught CoreData could not follow for」というレポートが表示されます。
わかりましたので、チェックし[_nowPlaying isFault]
ます。数秒ごとに関数を呼び出すので、その特定の時点で保存されていなくても重要ではありません。NSZombie からのメッセージが0で正常に動作しています。
ここで問題が発生します。NSZombieEnabled のチェックを外すと、アプリ[_nowPlaying isFault]
が EXC_BAD_ACCESS でクラッシュします。これはどうやら私が昔のクラッシュを経験したことを意味しているようです。
今、私は完全に迷っています。ここからどこへ行けばいいですか?
更新: @ArkadiuszHolko コメントへの対応
当たり前だと思っていましたが、以下です。
[[[SRAudioPlayer sharedAudioPlayer] player] pause];
[self performSelector:@selector(setPlayback) withObject:nil afterDelay:0.5f];
そして setPlayback はただ
NSManagedObject *episode = [_fetchedResultsController objectAtIndexPath:indexPath];
[[SRAudioPlayer sharedAudioPlayer] setNowPlaying:episode];