0

在我的应用程序中是一个非常非常乏味的错误!几乎每次我构建我的应用程序时,我都会收到“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)];

有人可以帮助我吗?

4

3 回答 3

0

几行代码就不是那么容易分辨的了。正如 Dig 所说,您的故事板可能不会被保留。不过,我会推荐以下方法:

1)确保您在某处没有可能成为问题根源的悬空指针。

-> 看看你对故事板(和其他人!)做了什么。您是否以某种方式将其保留在某个地方?按照惯例,storyboardWithName 返回一个自动释放的对象。如果没有任何帮助,您可能需要自己保留它。对其他人也一样。

-> 在僵尸模式下运行仪器,你可能会发现一些有趣的东西。我建议启用此功能和保留计数

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

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

希望这可以帮助。

于 2013-10-30T15:53:32.297 回答
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)并且您必须对指针具有强引用(当您使用属性时会自动维护,即self.mainStoryboad

于 2013-10-30T15:46:33.110 回答
0

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

转到“YourProjectName”(就在停止 btn 旁边)->Edit Scheme->Enable Guard MallocEnable Zombi Objects。然后只需设置刹车点,看看会发生什么。

不过,这是一项相当昂贵的操作,因此您可能希望在解决问题时将其关闭。

问候,

HrisTo

于 2013-10-30T15:54:39.877 回答