2

背景:

我正在尝试 CS193P 课程中的“HelloPoly”作业。我已经创建了我的 .xib 文件和一个自定义控制器类。

我没有充实任何方法——我只允许 IB 将类文件写入 xcode。

问题:

每次我启动应用程序时,它都会爆炸。当我运行 gdb 时,我看到这是一个 EXC_BAD_ACCESS 错误。这意味着我正在访问内存中不存在的东西,对吗?事情是,我所拥有的只是 IB 和 main.js 创建的默认文件。而已。

我检查了发布的代码解决方案,看看有什么不同,我不确定接下来要尝试什么。当您的应用程序每次启动时崩溃时,你们通常会检查什么?

堆栈跟踪显示它在创建 UIApplicationMain 时发生在 main.m 中 - 这意味着我从未将它交给我的应用程序委托。

这是跟踪:

Program received signal:  “EXC_BAD_ACCESS”.
(gdb) where
#0  0x01b70d45 in CFHash ()
#1  0x01b741cf in __CFDictionaryFindBuckets1b ()
#2  0x01b72b0a in CFDictionaryGetValue ()
#3  0x00450535 in -[UIProxyObject initWithCoder:] ()
#4  0x0133886e in UINibDecoderDecodeObjectForValue ()
#5  0x013398c2 in -[UINibDecoder decodeObjectForKey:] ()
#6  0x00450b35 in -[UIRuntimeConnection initWithCoder:] ()
#7  0x0045101c in -[UIRuntimeEventConnection initWithCoder:] ()
#8  0x0133886e in UINibDecoderDecodeObjectForValue ()
#9  0x0133820a in UINibDecoderDecodeObjectForValue ()
#10 0x013398c2 in -[UINibDecoder decodeObjectForKey:] ()
#11 0x0044feab in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:] ()
#12 0x00451fcb in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:] ()
#13 0x002910a6 in -[UIApplication _loadMainNibFile] ()
#14 0x0029a82a in -[UIApplication _runWithURL:sourceBundleID:] ()
#15 0x00297b88 in -[UIApplication handleEvent:withNewEvent:] ()
#16 0x002936d3 in -[UIApplication sendEvent:] ()
#17 0x0029a0b5 in _UIApplicationHandleEvent ()
#18 0x0239eef1 in PurpleEventCallback ()
#19 0x01bb2b80 in CFRunLoopRunSpecific ()
#20 0x01bb1c48 in CFRunLoopRunInMode ()
#21 0x00291e69 in -[UIApplication _run] ()
#22 0x0029b003 in UIApplicationMain ()
#23 0x000026a8 in main (argc=1, argv=0xbffff000) at main.m:14

我没有在其他线程中看到这个特殊问题,但如果我错过了它们,请提示我。

想法?

谢谢。

4

3 回答 3

3

它在 NibDecoder 中崩溃,即在加载您的 XIB 文件时。您可能在其中引用了不存在或未初始化的对象或属性。

于 2010-02-07T22:05:18.760 回答
0

检查 .xib 文件的名称和 initByNibName 方法的名称,如果它们相同。大概,这两个名字是不一样的。

于 2010-02-07T22:42:32.613 回答
0

我刚刚在一本自学书籍中为类似的基本 iPhone 应用程序解决了这个问题,并意识到我只是在 " 后面而不是前面放错了一个 @ - Meow 是一个搞砸了(下)的那个,这足以抛出错误:

animalSounds=[[NSArray alloc]initWithObjects: @"Oink","@Rawr",@"Ssss",@"Roof","@Meow",@"Honk",@"Squeak",nil];

为了调试,我使用了设置断点和 NSLog 输出的超级基本方法,所以我可以找出我使用的 4 个变量中的哪一个被搞砸了。

于 2010-12-28T21:04:59.567 回答