0

在 adhoc 模式下,我在两个不同的设备(iphone 3g 和 ipod touch)上看到了以下崩溃,尽管在为这些设备构建调试模式时似乎没问题。在 iPhone 4 上似乎也可以。

这是我在临时模式下获得的堆栈跟踪:

https://gist.github.com/af5ea32f2dacc795387e

据我所知,这个堆栈跟踪正在产生对 requestWithURL:delegate: 的递归调用——尽管它在代码中没有进行这样的调用:

///////////////////////////////////////////////////////////////////////////////////////////////////
+ (TTURLRequest*)requestWithURL:(NSString*)URL delegate:(id /*<TTURLRequestDelegate>*/)delegate {
  return [[[TTURLRequest alloc] initWithURL:URL delegate:delegate] autorelease];
}

那么这里发生了什么?我该如何进一步调试呢?

4

1 回答 1

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

首先添加一些打印语句来查看哪个函数调用是违规者,使用:

[对象 doesRespondToSelector:@selector(someFunction:withArg:)]

如果调用未定义函数的不是您的代码,请确保您传入的参数有效,打印出URL的值,并委托以确保它们确实是预期的类型和值。最重要的是确保委托确实响应TTURLRequest将传递给它的任何消息。

另外,TTURLRequest是你的类吗,你能给出完整的定义吗,它是否扩展了另一个类,它是否定义了 'initWithURL'?我们能看到源头吗?对于任何试图调试代码的人来说,这些都是重要的问题。

于 2010-10-20T22:53:52.253 回答