EXC_BAD_ACCESS错误?

时间:2013-10-30 15:43:05

标签: ios cocoa-touch exc-bad-access

在我的应用程序中是一个非常非常繁琐的错误! 几乎每次我构建我的应用程序时,我都会得到一个“EXC_BAD_ACCESS”错误! 没关系,可能会出现错误,但如果我再次尝试构建应用程序,则会出现错误,但会出现另一行代码!!

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIStoryboard *mainStoryboard = nil;
if ([[UIScreen mainScreen] bounds].size.height <= 480) {
    mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
} else {
    mainStoryboard = [UIStoryboard storyboardWithName:@"Main4er" bundle:nil];
}

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setRootViewController:[mainStoryboard instantiateInitialViewController]];
[self.window makeKeyAndVisible]; // HERE THE ERROR COMES SOMETIMES
return YES; }

我不知道我的错在哪里!我不支持发布,保留 - 当我开始开发应用程序时,我将其关闭了!

有时错误出现在这样的行:

UILabel * labelNiederlage = [[UILabel alloc] initWithFrame:CGRectMake(243, -2, 40, 26)];

有人能帮助我吗?

3 个答案:

答案 0 :(得分:0)

就像一个想法,如果你使用故事板,你可以安全地删除这些行

UIStoryboard *mainStoryboard = nil;
    if ([[UIScreen mainScreen] bounds].size.height <= 480) {
        mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    } else {
        mainStoryboard = [UIStoryboard storyboardWithName:@"Main4er" bundle:nil];
    }
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setRootViewController:[mainStoryboard instantiateInitialViewController]];

为不同的屏幕高度制作两个故事板也是一个坏主意,因为你可以在单个故事板中制作动态高度的元素

可能您的应用失败了,因为您没有使用属性,mainStoryboad必须是(strong, nonatomic),并且您必须强烈引用指针(当您使用属性时会自动维护,即{{ 1}};

答案 1 :(得分:0)

从几行代码中分辨出来并不容易。正如Dig所说,你的故事板可能无法保留。不过,我建议采用以下方法:

1)确保你的某个地方没有可能是问题根源的悬挂指针。

- &GT;看看你对故事板(以及其他人)的处理方式!你是否以某种方式保留它?按照惯例,storyboardWithName返回一个自动释放的对象。如果你没有做任何事情,你可能需要自己保留它。其他人也一样。

- &GT;使用僵尸模式运行乐器,你可能会发现一些有趣的东西。我建议启用此功能并保留计数

2)如果你不能用它来发现它,在一个几乎空的故事板的新项目中构建一个简单的测试用例。这可能有助于解决这里的问题。

3)将您的代码与工作示例进行比较。有很多它们。只需得到一个并发现差异。

希望这有帮助。

答案 2 :(得分:0)

每当遇到此类错误时,您都可以使用 Zombie Objects 来暗示出现了什么问题。

转到“YourProjectName”(停止btn旁边) - &gt;编辑Scheme-&gt;启用Guard Malloc 启用Zombi对象。然后设置制动点,看看发生了什么。

虽然这是非常昂贵的操作,所以你可能想在解决问题时将其关闭。

此致

赫里斯托斯