如何解决在NSMutableDictionary中将委托类设置为Key
|| 我正在尝试创建一个NSMutableDictionary,其键由UIViewController委托组成,如下所示:-(void) registerAsLocationManagerDelegate:(id<RTALocationManagerDelegate>)lmDelegate forPeriodicUpdates:(NSTimeInterval)seconds
{
NSTimer* periodicTimer = [NSTimer scheduledTimerWithTimeInterval:seconds
target:self
selector:@selector(runPeriodicUpdates:)
userInfo:nil
repeats:YES];
[periodicUpdateDelegates setObject:periodicTimer forKey:lmDelegate];
}
但是,我的代码崩溃是因为出现此错误:
*由于未捕获的异常\'NSInvalidArgumentException \'而终止应用程序,原因:\'-[RTALocationsListViewController copyWithZone:]:无法识别的选择器已发送至实例0x1a9750 \'
有什么办法吗?我尝试这样做是完全错误的吗?我应该采取不同的方法吗?谢谢你的帮助!
解决方法
NSDictionary密钥可以是任何对象,只要它们符合“ 1”协议。
您收到的错误是因为
copyWithZone
是此协议的一部分,并且您的委托对象可能未实现。 -所以不能成为钥匙。
您的选择是获取类的字符串表示形式并将其用作键-但是,如果您有多个属于同一类的委托,这可能不起作用(因为键将不是唯一的)。或者,在您的委托类中实现“ 1”协议。
, 虽然NSDictionary复制密钥,但CFDictionary函数不会。改用CFDictionary(或利用“免费桥接”)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。