所以,我有这个问题,我的应用程序播放音频,并且只要点按按钮或选择其他曲目,它就会在触发暂停时存储播放位置。当后者发生时,我以编程方式调用暂停:并在开始播放下一首曲目之前设置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无法解决错误”
好的,所以我检查了[_nowPlaying isFault]
,我想,因为我也每隔几秒就调用一次这个函数,如果它没有在那个特定点保存,那就不重要了。它与NSZombie的 0条消息一起正常工作。
出现问题,当我取消选中NSZombieEnabled时,应用程序在[_nowPlaying isFault]
上使用EXC_BAD_ACCESS崩溃。这显然意味着我有a plain old crash。
现在,我完全迷失了。不知道从哪里开始?
更新:回复@ArkadiuszHolko评论
认为这很明显,但现在是:
[[[SRAudioPlayer sharedAudioPlayer] player] pause];
[self performSelector:@selector(setPlayback) withObject:nil afterDelay:0.5f];
而setPlayback只是
NSManagedObject *episode = [_fetchedResultsController objectAtIndexPath:indexPath];
[[SRAudioPlayer sharedAudioPlayer] setNowPlaying:episode];
答案 0 :(得分:0)
你在使用ARC吗? - 谁持有_nowPlaying?
根据我的经验确定是否删除对象的最佳方法是
[myManagedContext existingObjectForObjectID: _nowPlaying.objectID]!=nil
答案 1 :(得分:0)
回应你的评论:
由于未被捕获, * 终止应用程序的代码仍然崩溃 异常'NSInvalidArgumentException',原因:' - [__ NSCFDictionary objectID]:无法识别的选择器发送到实例0x104ab9c0'。
您的_nowPlaying
(或其他某个对象)似乎是NSDictionary
,其中Core Data期望它为NSManagedObject
。