Я пишу довольно простое приложение для iPhone, которое будет воспроизводить звук в зависимости от того, какая кнопка нажата - PullRequest
2 голосов
/ 30 января 2010

А ... как я изучаю Цель С.

Будет одновременно отображаться около 20 кнопок ...:)

Если я использую цикл if / else для каждой нажатой кнопки, он прекрасно работает, но я считаю, что это не элегантно и просто громоздко.

Итак, я использую button.tag, чтобы позволить мне назначить номер каждой кнопке, а затем оценивать каждую кнопку на основе свойства .tag.
Как я упоминал ранее, прекрасно работает с циклами if / else if.

Но я хочу изменить тег на строку, а затем вставить ее в NSURL для воспроизведения звука. Каждая кнопка будет генерировать новый тег и, следовательно, новый звук.

Как сообщает отладчик, я получаю сообщения Not a CFSTRING и 'out of bounds' и после прохождения, вылетает. Весело, но не синий экран.

Вот код, о котором идет речь. Я смиренно прошу гуру Objective C дать некоторое понимание!

int soundNumber = [sender tag];

//soundPick = [NSString stringWithFormat:@"%d", soundNumber]; //remmed out as an alternative try
NSString *soundPick = [[NSNumber numberWithInt:soundNumber] stringValue];

NSURL *aSoundURL = [NSURL fileURLWithPath:[mainBundle pathForResource:soundPick ofType:@"aif"]];   
playSound = [[AVAudioPlayer alloc] initWithContentsOfURL:aSoundURL error:&error];
if (!playSound) {
    NSLog(@"no Sound for that button: %@", [error localizedDescription]); 
} 
[playSound play];

*/

Спасибо

Neil

Ответы [ 4 ]

1 голос
/ 04 февраля 2010

Я бы создал массив со всеми 20 путями к файлам, а затем использовал бы тег для индексации массива.

0 голосов
/ 05 февраля 2010

Спасибо! Я получил код для работы, и я использовал button.tag. Затем я назвал каждый звуковой файл по номеру тега. Итак, тег 1 = 1.aif, тег 2 = 2.aif и т. Д. Я использовал бумажный график, чтобы начать гонку. У меня была проблема, как получить button.tag в виде строки, и я боролся, пока не понял: - (IBAction) buttonPressed: (id) sender; int soundTag = [тег отправителя]; soundPick = [[NSString alloc] initWithFormat: @ "% d", soundTag]; Затем взял soundPick и застрял в соответствующем месте в NSURL .. Спасибо!

0 голосов
/ 05 февраля 2010

На IBActions добавьте что-то вроде этого:

SystemSoundID theSound; 
NSString *pathToSound;

pathToSound = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"<filename>" ofType:@"<filetype>"] isDirectory:NO];

AudioServicesCreateSystemSoundID((CFURLRef)pathToSound, &theSound);
AudioServicesPlaySystemSound (theSound);

Затем добавьте это в ваш файл .h и программу AudioToolbox.framework в свой проект:

#import <AudioToolbox/AudioToolbox.h>

Сработало как шарм для меня. Надеюсь, это поможет.

0 голосов
/ 30 января 2010

Звучит так, будто вы программируете поведение своих кнопок.

Почему бы вам просто не назначить каждой кнопке свой метод IBOutlet / callback? Вам вообще не понадобятся операторы if / else.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...