我在adhoc模式下看到两个不同设备(iphone 3g和ipod touch)发生以下崩溃,尽管在这些设备的调试模式下构建时似乎没问题。它在iPhone 4上也似乎没问题。
这是我在ad hoc模式下获得的堆栈跟踪:
https://gist.github.com/af5ea32f2dacc795387e
据我所知,这个堆栈跟踪产生了对requestWithURL的递归调用:delegate: - 尽管它在代码中没有进行这样的调用:
///////////////////////////////////////////////////////////////////////////////////////////////////
+ (TTURLRequest*)requestWithURL:(NSString*)URL delegate:(id /*<TTURLRequestDelegate>*/)delegate {
return [[[TTURLRequest alloc] initWithURL:URL delegate:delegate] autorelease];
}
那么这里发生了什么?我该如何进一步调试?
答案 0 :(得分:1)
从堆栈跟踪(第8行)看起来有些东西正在调用未定义的函数
8 CoreFoundation 0x000a5b28 -[NSObject(NSObject) doesNotRecognizeSelector:] + 8
9 CoreFoundation 0x0004ae00 ___forwarding___ + 500
10 CoreFoundation 0x0004abb8 _CF_forwarding_prep_0 + 40
11 App 0x0005684a +[TTURLRequest requestWithURL:delegate:] + 42
12 App 0x00056840 +[TTURLRequest requestWithURL:delegate:] + 32
首先添加一些打印语句以查看哪个函数调用是罪犯,使用:
[object doesRespondToSelector:@selector(someFunction:withArg :)]
如果您的代码不是调用未定义的函数,请确保传入的参数有效,请打印出 URL 和委托的值确保它们确实具有预期的类型和价值。最重要的是确保委托确实响应 TTURLRequest 将传递给它的任何消息。
此外,您的课程是 TTURLRequest ,您是否可以提供完整定义,是否会扩展另一个课程,是否定义了'initWithURL'?我们能看到来源吗?对于试图调试代码的人来说,这些都是重要的问题。