【发布时间】:2011-04-13 13:56:58
【问题描述】:
这是我的问题的背景。首先有一个线程开始:
-(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, &size_vocal);
// more code....
奇怪的是,none 的 NSLogs 打印 。没有。纳达。压缩。然后应用程序在尝试将位置传递给 read wav 方法时崩溃(可能是因为字符串有问题)。
当我从使用 NSTemporaryDirectory 切换到 NSBundle 时,这一切都开始发生了,但我不确定这是否与它有关。有什么建议吗?
我接受了 Joetjah 的建议并开始改用:
[self runAllAudioRoutines:local_recordFilePath_NSString];
-(void)runAllAudioRoutines:(NSString*) file
现在我得到了这个:
第二次运行,来自 Joetjah 的第二条建议
【问题讨论】:
-
能够在控制台中看到调用堆栈和错误会非常有用。
-
@Eric Brotto:我也想查看崩溃日志。我想将行更改为
[self runAllAdioRoutines:local_recordFilePath_NSString];并将无效行更改为-(void) runAllAudioRoutines:(NSString*) file {不起作用?只是为了检查^^ -
我在控制台中没有收到任何错误或调用堆栈。除非它在别处(?)
-
@Joetjah,好建议。我试试看。
-
@Eric Brotto:很高兴看到它取得了一些进展(?)。崩溃发生在哪一行?日志似乎表明 runAllAudioRoutines 方法获得了一个 nil 对象,但我看到了别的东西。您的日志没有说
run thread : path %@尝试分配字符串为:NSString *local_recordFilePath_NSString = [[NSString alloc] initWithString:file_path_NSObject];而不是您的行NSString *local_recordFilePath_NSString = (NSString *)file_path_NSObject;,看看是否有任何效果?
标签: iphone objective-c cocoa-touch nsstring nsbundle