Почему я получаю это: _cfurl: нераспознанный селектор - PullRequest
0 голосов
/ 10 июня 2011

Моя инициализация начинается так:

- (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'

Да, это немного некомпактно для отладки.

Непосредственно перед тем, как я получу дамп, theFirstNoise содержит ожидаемые (вроде) данные. (Метод описания печатает странную форму, но мне сообщили, что это нормально.)

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Вне моей головы, похоже, что theFirstNoise на самом деле NSPathStore2 (частный подкласс NSString) вместо NSURL.

Редактировать: NSPathStore2 объектыбудет содержать пути к файлам.Если вам нужно превратить их в NSURL с, вы можете просто передать их +[NSURL fileURLWithPath:].

1 голос
/ 10 июня 2011

Эта строка:

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

является проблемой: [sounds allKeys] возвращает NSArray ключей, а objectAtIndex: поэтому возвращает NSString, а не URL. Хотелось бы, чтобы компилятор был немного более полезным.

...