为啥应用程序在 iPhone 模拟器中崩溃;我怎样才能解决这个问题?
Posted
技术标签:
【中文标题】为啥应用程序在 iPhone 模拟器中崩溃;我怎样才能解决这个问题?【英文标题】:Why is app crashing in iPhone simulator; how can I fix this?为什么应用程序在 iPhone 模拟器中崩溃;我怎样才能解决这个问题? 【发布时间】:2010-11-07 21:47:20 【问题描述】:我正在开发一个使用导航控制器的应用程序。当我构建时,我没有收到任何错误或警告。我在FirstViewController.m
文件中定义了一个方法myMethod
,然后在viewDidLoad
中使用[self myMethod];
调用该方法。
当我从控制台构建和运行时,我什么也没得到。所以我把NSLog()
声明如下:
-(void) viewDidLoad
NSLog(@"Entering viewDidLoad");
[self myMethod];
NSLog(@"Called myMethod");
[super viewDidLoad];
控制台从不返回第二个 NSLog 语句,这让我相信应用程序在调用该方法时崩溃了。
我已尝试将模拟器设置为 ios 4.0.1 和 iOS 4.1。我正在针对 iOS 4.1 SDK 构建。非常感谢您提供的任何帮助。
更新:我运行了调试器,这似乎表明问题出在myMethod
。在收到“EXC_BAD_ACCESS”之前,我只通过该方法中的几行代码完成它。代码行是:
-(void)myMethod
NSMutableArray *someStuff;
NSMutableArray *someMoreStuff;
stuffSections=[[NSMutableArray alloc] initWithObjects:@"Some Stuff",@"Some More Stuff",nil];
someStuff=[[NSMutableArray alloc] init];
someMoreStuff=[[NSMutableArray alloc] init];
[someStuff addObject:[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Item Name",@"name",@"Item Picture.png",@"picture",@"http://theurl.net/",@"url",@"1",@"itemCode",nil]];
但似乎我无法通过第一次尝试向someStuff
数组添加内容。
【问题讨论】:
设置断点并使用调试器。并实际运行附加的调试器(不仅仅是调试目标)。 好的,我在 [self myMethod] 之后立即放置了断点。在调试器控制台中显示“程序接收信号:'EXC_BAD_ACCESS'。”不过,我对此很陌生,不知道调试器窗口中的这些结果是什么意思...... 尝试使用 command+Y 而不是 command+R 运行。这将在附加调试器的情况下启动。当你的程序崩溃时,执行将在有问题的行暂停,让你有机会找出它在哪里,并在那个时候检查你的变量的值。 嗯,我一直在这样做,但我并没有真正从所提供的信息中提取任何东西(似乎是自学的具有挑战性的部分)。我所知道的是,尝试将第一个 NSMutableDictionary 添加到 NSMutableArray someStuff 时失败。 【参考方案1】:“myMethod”中似乎有问题。如果我不得不猜测,我会说您正在尝试引用一个自动释放而不是保留的对象。
【讨论】:
【参考方案2】:您在初始化 someStuff 和 someMoreStuff 时缺少分配。应该是
someStuff = [[NSMutableArray alloc] init];
someMoreStuff = [[NSMutableArray alloc] init];
【讨论】:
我在代码中确实有它,但在这里没有输入。我想我会开始复制粘贴。对此感到抱歉。【参考方案3】:您是否交叉检查了两个 MutableArrays?是否已成功分配?当应用程序进入损坏状态时,您会收到“EXC_BAD_ACCESS”,这通常是由于内存管理问题。我猜数组没有分配。
尝试以这种方式分配。
NSMutableArray * someStuff = [[NSMutableArray alloc]initWithCapacity:3];
NSMutableArray * someMoreStuff = [[NSMutableArray alloc]initWithCapacity:3];
在调试区添加断点,确认是否分配成功。如果这些数组中的每一个都有一个内存,那么它们就会被分配。
【讨论】:
以上是关于为啥应用程序在 iPhone 模拟器中崩溃;我怎样才能解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章
iPhone 应用程序在 OS 3.1 不在模拟器中的设备上崩溃