0

だから、私はこの問題を抱えています.私のアプリはオーディオを再生し、ボタンをタップするか、他のトラックを選択することによって一時停止がトリガーされるたびに、再生位置を保存しました. 後者が発生した場合、プログラムで一時停止を呼び出し、次のトラックの再生を開始する前に 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];
4

2 に答える 2

0

ARCを使用していますか?- _nowPlaying を保持しているのは誰ですか?

私の経験では、オブジェクトが削除されたかどうかを確認する最良の方法は

[myManagedContext existingObjectForObjectID: _nowPlaying.objectID]!=nil
于 2013-10-11T09:59:13.590 に答える