Путь NSURL не работает должным образом, несмотря на кодовые пространства для fileWithUrlPath: - PullRequest
0 голосов
/ 29 июня 2011

Я реализую простой интерфейс кнопки-звука для игрушечного проекта.Есть несколько кнопок, с отдельными звуками, назначенными для каждой кнопки.Я выполняю все это в fooViewController. {H, m} с атрибутом 'tag' каждого UIButton, например, так:

B0.tag = 0;
B1.tag = 1;
...

У меня также есть массив звуковых файлов, которые я храню в массивестроки, заполненные следующим образом:

sounds[0] = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"caf"];
sounds[1] = [[NSBundle mainBundle] pathForResource:@"bar" ofType:@"caf"];
...

Теперь, когда вызывается событие Touch Up Inside, запускается следующий метод:

-(IBAction)playSoundClip:(id)sender {

    if(sounds[[sender tag]] != nil) {
        NSError *error;        
        NSString *temp = [sounds[[sender tag]]   stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        AVAudioPlayer *av = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:temp] error:&error];

        [av play]
    }
}

Я всегда получаю исключение EXC_BAD_ACCESS.Когда я распечатываю строки, они находятся в такте, и, как и следовало ожидать ... несколько пробелов, которые, как я думал, будут учтены строковой кодировкой ^ выше.

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Вам нужно выделить NSError * error:

NSError * error = [[NSError alloc] init];

0 голосов
/ 29 июня 2011

Вы заполняете массив C автоматически выпущенными объектами.Поскольку вы не вступаете во владение объектами, они будут освобождены вскоре после назначения.

Я рекомендую использовать экземпляр NSArray для хранения ваших путей.Он автоматически сохранит их при добавлении пути.

...