Свежий пример SpeakHere приложение имеет ошибку при записи звука в Simulator / Xcode
Я не могу записывать аудио с помощью приложения SpeakHere example от apple. Когда я запускаю приложение в симуляторе из Xcode, оно запускается нормально, но когда я нажимаю кнопку записи, возникает ошибка " Thread 1: EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)":
Сообщение журнала о пропавшем корневом контроллере представления при запуске приложения уже существует до возникновения вышеуказанной ошибки, и это, вероятно, не связано с моей проблемой.
Я скачал Speacher пример проекта из связанного веб-сайта (см. начало этого вопроса), открыл свежую загрузку в Xcode и непосредственно запустил приложение. Я не изменил ни одной настройки и ни одной строки кода. Я также искал в google и stackoverflow эту проблему и не нашел решения, хотя эта проблема должна быть очень общей.
Я использую Xcode версии 4.5.2 (4G2008a) и MacBook Pro с конца 2009 года с Mac OS X 10.8.
У меня также был друг, который попробовал это на своем компьютере, и у него есть та же самая проблема. У него та же ОС, и его версия XCode также 4.5.2.
Я бы сейчас попробовал старые версии Xcode,но сейчас мне не нравится загружать несколько гигабайт для пробного подхода к моему соединению.
Любая помощь оценена, включая отчеты типа " работает для меня с версией Xcode ...". Спасибо!
2 ответа:
Проблема возникает потому, что в методе
AQRecorder::StartRecord(CFStringRef inRecordFile)
ФункцияCFURLCreateWithString()
терпит неудачу и возвращает указатель на nil. Это не обнаружено, а позже в коде вызываетсяCFRelease()
на нулевой указатель, который вызывает EXC_BREAKPOINT.Цель метода
CFURLCreateWithString()
в основном состоит в том, чтобы взять строку url в качестве входных данных и вернуть указатель на объект CFURL в качестве выходных данных. Проблема здесь в том, что входные данные не являются строкой url. Вместо этого, это просто путь в локальной файловой системе безfile:/
или подобного как префикс. По этой причине этот метод не работает.Решение состоит в том, чтобы удалить неработающий вызов метода
CFURLCreateWithString()
и вместо этого вызвать связанный метод, а именноCFURLCreateWithFileSystemPath()
, который готов принять путь локальной файловой системы и преобразовать его в CFURL:В методе
AQRecorder::StartRecord(CFStringRef inRecordFile)
Замените или закомментируйте строкуurl = CFURLCreateWithString(kCFAllocatorDefault, (CFStringRef)recordFile, NULL);
И вставить
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)recordFile, kCFURLPOSIXPathStyle, false);
На своем месте.
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)recordFile, kCFURLPOSIXPathStyle, false);
Приведенный выше код сделал мой xcoce 4.6 скомпилировать и запустить в симуляторе, но это не рекорд мой голос с моего микрофона USB, я могу проверить мой микрофон в ГараШ диапазон применения и успешно записывать и воспроизводить свой голос, и dbmeter не двигается вообще никак, когда я портировать его на реальном устройстве, он просто не может записать и воспроизвести голос в мой тренажер.