糟糕的UIViewController

时间:2011-07-28 00:30:19

标签: iphone nsstring exc-bad-access

我有一个viewController给我一个问题......

UIViewController *nextController = [[NextView alloc] initWithNibName:@"NextView" bundle:nil];
[currentPageController.view removeFromSuperview];
[self.view addSubview:nextController.view];

我的应用程序在此处崩溃并使用EXC_BAD_ACCESS。

有没有人知道可能导致这种情况的原因?

提前致谢!

更新

使用断点并单步执行代码后,问题似乎出现在viewController的viewDidLoad中的这段代码中:

NSString *noteToSet;

        if ([Settings isData]) {
            noteToSet = [NSString stringWithFormat:@"Data, "];
        }
        if ([Settings isGeom]) {
            if ([noteToSet isEqualToString:@""]) {
                noteToSet = [NSString stringWithFormat:@"Geom, "];
            } else {
                noteToSet = [noteToSet stringByAppendingFormat:@"Geom, "];
            }
        }

有人在那里看到问题吗? 非常感谢!

固定

通过使用空白值@“”

初始化字符串来修复它
noteToSet = [NSString stringWithFormat:@""];

3 个答案:

答案 0 :(得分:1)

所以答案的第一部分是 - 如果你的viewController不会加载,你不知道为什么 - 检查viewDidLoad中的代码,这就是我的问题所在,这让我疯狂地试图找出问题所在viewController本身,它一直是viewDidLoad中的NSString问题。

第二部分是你不能使用[stringName isEqualToString:@“”]将NSString与空值进行比较,除非你从NSUSerDefaults获得该字符串,或者除非你首先将字符串设置为等于@“”。

答案 1 :(得分:0)

我在发布的代码中没有看到导致异常的任何内容。但是,您发布的两段代码都包含以下行:

currentPageController = nextController;
[currentPageController retain];
[nextController release];

由于第一行使currentPageController指向与nextController相同的对象,因此第二行和第三行相互抵消。你不妨写一下:

currentPageController = nextController;

然后离开它。在代码中的某些其他方面存在类似的误解可能很容易导致您经常错过保留或释放并导致您似乎看到的那种坏指针。

答案 2 :(得分:0)

EXC_BAD_ACCESS通常是由内存管理不善引起的。转到Xcode中的Build菜单并使用Allocations对其进行配置(在模拟器中)。然后进去确保你有Zombies Enabled。在模拟器中运行应用程序并将其指向您收到错误的位置。然后,仪器应该告诉您坏内存管理的位置。如果你仍然无法得到它,那么告诉我们你得到了什么。

以下是指南:http://www.markj.net/iphone-memory-debug-nszombie/