背景
我正在尝试CS193P课程中的“HelloPoly”作业。 我已经创建了我的.xib文件和一个自定义的Controller类。
我没有充实任何方法 - 我只允许IB将类文件写入xcode。
问题:
每次启动应用程序时,都会爆炸。当我运行gdb时,我发现它是一个EXC_BAD_ACCESS错误。这意味着我正在访问内存中不存在的内容吗?事实上,我所拥有的是IB和主要创建的默认文件。没什么。
我已经检查过发布的代码解决方案,看看有什么不同,我不知道下一步该尝试什么。当你的应用程序每次启动时崩溃时,你们通常会检查什么?
堆栈跟踪显示在创建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
我没有在其他线程中看到这个特殊问题,但如果我错过了它们,请告诉我。
想法?
感谢。
答案 0 :(得分:3)
它在NibDecoder中崩溃,即在加载XIB文件时崩溃。您可能在那里引用了一个不存在或未初始化的对象或属性。
答案 1 :(得分:0)
检查.xib文件的名称和initByNibName方法的名称(如果它们是相同的)。可能这两个名字是不同的。
答案 2 :(得分:0)
我刚刚在自学书中解决了这个类似基本的iPhone应用程序的问题,并意识到我只是在“而不是在前面”之后错放了一个@ - Meow是那个搞砸了(下面)的那个,那是足以抛出错误:
animalSounds=[[NSArray alloc]initWithObjects: @"Oink","@Rawr",@"Ssss",@"Roof","@Meow",@"Honk",@"Squeak",nil];
要调试我使用了设置断点和NSLog输出的超级基本方法,所以我可以弄清楚我使用的4个变量中的哪一个搞砸了。