2012-01-12 74 views
1

在我的项目中,我导入了一些第三方框架,如谷歌地图。一切编译时正常工作,但在运行时,应用程序崩溃,我可以追踪可疑的方法:initWithCoder方法在被调用时不断导致崩溃

//Invoked when the class is instantiated in XIB 
-(id)initWithCoder:(NSCoder*)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if(self) 
    { 
     [self customInitialization]; 
    } 
    return self; 
} 

这里是崩溃我得到的堆栈:

TestMapDirections[1343:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter' 
*** First throw call stack: 
(0x13ea052 0x2035d0a 0x1392a78 0x13929e9 0xae854b 0xae84d5 0x23e3f 0x23d17 0x223b0 0x2230b 0x29e5 0x2ae6 0x3d3335 0x4d1fa2 0x4d16b7 0x3d2ead 0x4d1fa2 0x4d19af 0x4d16b7 0x3d2305 0x5d884f 0x5d8dd7 0x13ebec9 0x1b75c2 0x1b755a 0x25cb76 0x25d03f 0x25c2fe 0x1dca30 0x1dcc56 0x1c3384 0x1b6aa9 0x1601fa9 0x13be1c5 0x1323022 0x132190a 0x1320db4 0x1320ccb 0x1600879 0x160093e 0x1b4a9b 0x2478 0x23d5) 
terminate called throwing an exceptionsharedlibrary apply-load-rules all 
Current language: auto; currently objective-c 

您可以下载my application并尝试在你的东西上,也许你可以帮助我更多地找出问题,提前thanx。

编辑: @JSON COCO:这里是customInitialization方法的代码:

-(void)customInitialization 
{ 
    // do the initialization of class variables here.. 

    mDirections   = [UICGDirections sharedDirections]; 
    mDirections.delegate = self; 
} 
+0

更可疑'-customInitialization'方法中的代码是什么? – 2012-01-12 15:54:15

+0

嗨@Jason:我编辑了我的帖子,另外,请尝试下载并运行我的示例,它是一个轻量级的应用程序,可能你会更好地理解我的问题:) – Malloc 2012-01-12 15:57:31

+1

嗯,问题在于有些东西试图用一个零路径初始化一个URL。所以也许这是继承的类?继续检查每个类的'-initWithCoder:'方法的类层次结构,并找到从编码器中解压URL并尝试初始化一个ivar的类。改变这一点,以便您在尝试调用该方法之前检查解码的URL是否为零。 – 2012-01-12 16:01:01

回答

2

所以,我看着你的代码。它实际上是崩溃的谷歌地图API。它期望找到一个名为api.html的文件。我不熟悉你使用的这个框架,所以我不能告诉你这个html文件用于什么或者在哪里得到它。但是,您需要找到它并将其添加到项目文件中,并确保它进入您的构建阶段。为此,只需在编辑器右侧的文件实用程序检查器中查看(如果未打开,则可以通过按CMD + ALT + 1打开它)。在将api.html文件添加到项目后,选择它并检查以确保它在文件检查器中检查了目标。

这将导致崩溃停止。如果该文件实际上不需要,则可以更改文件UICGoogleMapsAPI.m的第39行。这是因为无法提交api.html文件而导致崩溃的线路。

+0

好的朋友,我会寻找那个文件。让我们保持联系:) – Malloc 2012-01-12 16:28:52

+0

嗨,就是这样,'api.html'丢失了。顺便说一句,你能告诉我你怎么知道名为'api.html'的指定文件丢失了,我的意思是可能是一个提示,可以帮助我在将来的问题上节省大量的时间。非常感谢您的持续帮助:) – Malloc 2012-01-13 13:00:17

+0

@Malek崩溃的原因是为传递无效参数(在这种情况下,传递nil来从路径字符串中创建URL)引发的异常。既然我们知道这是一个例外,我在异常提升上放置了一个断点并运行了应用程序。停止之后,我通过堆栈追踪了解nil的位置,并且看到从主包中为'api.html'请求了一个路径,并且将其传递到URL构造函数中,并将其取消选中。无论如何,这应该重新编写,以便首先从包中获取URL。 – 2012-01-13 19:49:40