gpt4 book ai didi

iphone - [NSDictionary valueForKey :] 内无法识别的选择器崩溃

转载 作者:行者123 更新时间:2023-11-29 13:23:03 24 4
gpt4 key购买 nike

我偶尔会遇到这种崩溃,这很难重现:

0   CoreFoundation                  0x39ff73e2 __exceptionPreprocess + 158
1 libobjc.A.dylib 0x3905095e objc_exception_throw + 26
2 CoreFoundation 0x39ffaf2c -[NSObject(NSObject) doesNotRecognizeSelector:] + 180
3 CoreFoundation 0x39ff9648 ___forwarding___ + 388
4 CoreFoundation 0x39f51204 _CF_forwarding_prep_0 + 20
5 Foundation 0x32914bec -[NSDictionary(NSKeyValueCoding) valueForKey:] + 28
6 MyAppName 0x00032112 -[myViewController stopPlayersWithVolume:] (myViewController.m:151)

来自这段代码:

- (void)stopPlayersWithVolume:(double)volume
{
for (NSString *file in players)
{
AVAudioPlayer *player = [players valueForKey:file];
if (player.volume == volume || volume == 0)
[player stop];
}
}

players 是一个 NSMutableDictionary 属性,无需 self. 即可访问,因为我认为 ARC 不需要它。键是文件名(例如“mysound.mp3”),值是 AVAudioPlayer 对象。

堆栈跟踪是否表明我传递给 [NSMutableDictionary valueForKey] 的参数 file 实际上不是 NSString,因此无法识别的选择器?正如您所期望的那样,它在调试器中始终是一个 NSString,因为它来自通过字典进行的快速枚举,但崩溃从未发生在调试器中。

我唯一的想法是存在破坏字典的线程问题。上面的代码是由 NSTimer 触发的,但这只是通过运行循环的消息,而不是单独的线程,所以我相信应该不需要担心跨线程访问?

任何建议表示赞赏。很抱歉把它扔掉,但我被卡住了。

编辑:

玩家字典在 viewDidLoad 中分配,因此:

players = [[NSMutableDictionary alloc] init];

并声明如下:

@property (retain, nonatomic) NSMutableDictionary *players;

并合成如下:

@synthesize players;

最佳答案

您的 players 字典或其内容可能在您遍历它们时被释放。你能打开NSZombies吗?并尝试在调试器中重现崩溃?它将为您提供有关正在释放的对象的更多信息。

关于iphone - [NSDictionary valueForKey :] 内无法识别的选择器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13878538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com