#iphone #objective-c #cocoa-touch #nsstring #nsbundle
#iPhone #objective-c #cocoa-touch #nsstring #nsbundle
Вопрос:
Вот контекст моей проблемы. Сначала запускается поток:
-(void)run_thread: (NSObject* )file_path_NSObject
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *local_recordFilePath_NSString = (NSString *)file_path_NSObject;
NSLog(@"run thread : path %@ ", local_recordFilePath_NSString);
printf("Running Thread...n");
runAllAudioRoutines(local_recordFilePath_NSString);
// more code....
Все, что указано выше, корректно выводится на консоль. Затем вызывается метод:
void runAllAudioRoutines(NSString *file)
{
NSLog(@"running All Audio Routines method...n");
NSString *truncatedFilePath = [file stringByReplacingOccurrencesOfString:@"LoopExtended.wav"
withString:@"recordedFile.wav"];
NSLog(@"FILE for !!!! --> %@",truncatedFilePath);
const char *location = [truncatedFilePath UTF8String];
const char *write_location = [file UTF8String];
int *vocal_data = read_wav(location, amp;size_vocal);
// more code....
Странно то, что ни один из NSLogs не печатается вообще. Ничего. Nada. Zip. И затем приложение выходит из строя, когда оно пытается передать местоположение методу read wav (предположительно, потому что со строкой что-то не так).
Все это начало происходить, когда я переключился с использования NSTemporaryDirectory на NSBundle, но я не уверен, имеет ли это какое-либо отношение к этому. Есть какие-нибудь советы?
Я воспользовался предложением Joetjah и начал использовать вместо этого:
[self runAllAudioRoutines:local_recordFilePath_NSString];
-(void)runAllAudioRoutines:(NSString*) file
и теперь я получаю это:
Второй запуск со 2-м предложением от Joetjah
Комментарии:
1. Было бы весьма полезно иметь возможность видеть стек вызовов и ошибки, которые вы получаете в своей консоли.
2. @Eric Brotto: Я бы тоже хотел посмотреть журнал сбоев. Я предполагаю, что изменение строки на
[self runAllAdioRoutines:local_recordFilePath_NSString];
и пустой строки на-(void) runAllAudioRoutines:(NSString*) file {
не работает? Просто чтобы проверить ^^3. Я не получаю никакой ошибки или стека вызовов в консоли. Если только это не в другом месте (?)
4. @Eric Brotto: приятно видеть, что в этом есть некоторый прогресс (?). На какой строке происходит сбой? Кажется, журнал указывает, что метод runAllAudioRoutines получает нулевой объект, но я вижу кое-что еще. В вашем журнале не написано,
run thread : path %@
попробуйте выделить строку с помощью:NSString *local_recordFilePath_NSString = [[NSString alloc] initWithString:file_path_NSObject];
вместо вашей строкиNSString *local_recordFilePath_NSString = (NSString *)file_path_NSObject;
и посмотрите, имеет ли это какой-либо эффект?5. @Joetjah, извините, но поток запуска действительно вызывается. Я просто не включил это на фото. Я все равно принял ваше предложение. Снимок экрана прилагается.
Ответ №1:
В сообщении, которое вы получаете, говорится, что SpeakHereController
не реализует метод runAllAudioRoutines:
.
Вы вызывали runAllAudioRoutines:
правильный объект?
Расширение: Objective-C — динамический язык. Вы можете вызвать любой метод для любого объекта, но если объект не реализует метод, приложение завершит работу с сообщением:
«нераспознанный селектор, отправленный экземпляру …»
C — это статический язык. Если вы попытаетесь вызвать функцию, которая не определена для объекта, она не будет компилироваться. В Objective-C он будет скомпилирован, но вы получите ошибку во время выполнения. Это то, что происходит с вами.
Комментарии:
1. Я не уверен, что вы имеете в виду под этим. Не могли бы вы расширить?