为什么我得到这个:_cfurl:无法识别的选择器

时间:2011-06-10 03:26:41

标签: objective-c ios audiotoolbox

我的init就是这样开始的:

- (id) init {
    [super init];
    sounds = makeDictFromArrayOfURLs(getNoiseFileURLs());
    [sounds retain];
    NSURL *theFirstNoise = [[sounds allKeys] objectAtIndex:0];
    CFURLRef uref = (CFURLRef)theFirstNoise;
    OSStatus ret = AudioServicesCreateSystemSoundID(uref, &chosenNoise);

当我们到达最后一行时,它会抛出这个:

2011-06-09 23:19:18.744 SuperTimer[94516:207] -[NSPathStore2 _cfurl]: unrecognized selector sent to instance 0x940cfb0
2011-06-09 23:19:18.746 SuperTimer[94516:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSPathStore2 _cfurl]: unrecognized selector sent to instance 0x940cfb0'

是的,调试有点紧凑。

在我获得转储之前,the First FirstNoise包含预期的(某种)数据。 (它的描述方法打印出一种奇怪的形式,但我被告知这是正常的。)

2 个答案:

答案 0 :(得分:3)

从我的头顶看,theFirstNoise实际上是NSPathStore2NSString的私有子类),而不是NSURL

编辑:NSPathStore2个对象将包含文件路径。如果您需要将这些内容转换为NSURL,则只需将其传递给+[NSURL fileURLWithPath:]

答案 1 :(得分:1)

这一行:

NSURL *theFirstNoise = [[sounds allKeys] objectAtIndex:0];

是问题:[声音allKeys]返回一个NSArray键,而objectAtIndex:因此返回一个NSString,而不是URL。我希望编译器能有所帮助。