所以,我遇到了这个问题,我的应用程序播放音频,并在触发暂停时存储播放位置,无论是通过点击按钮还是选择其他轨道。当后者发生时,我以编程方式调用 pause: 并在开始播放下一首曲目之前设置 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
到环境变量和日志报告“捕获的 CoreData 无法完成故障”
好的,所以我检查了[_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];