【问题标题】:App crashing when setting delegate for UITabBarViewController using Interface Builder使用 Interface Builder 为 UITabBarViewController 设置委托时应用程序崩溃
【发布时间】:2012-08-01 16:11:21
【问题描述】:

我正在尝试为我的故事板标签栏控制器创建一个 UITabBarControllerDelegate...

#import <Foundation/Foundation.h>

@class CountryPickerViewController;

@interface TabBarDelegate : NSObject <UITabBarControllerDelegate>

@property (strong) CountryPickerViewController *countryPickerViewController;

- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;

@end

我使用 Interface Builder 创建了一个对象,然后将其分配为这样的委托:

当我切换到另一个选项卡时,会导致崩溃。这是怎么回事,我该如何解决?

编辑:顺便说一下,tabBarController:didSelectViewController: 的方法实现是空的(不包含任何特定逻辑)

EDIT2:我没有得到像样的堆栈跟踪,我得到:

EXC_BAD_ACCESS,我会假设Tab Bar Delegate 对象可能为零?为什么会这样?

EDIT3:我启用了 NSZombies 并发现由于某种原因我在 Interface Builder 中创建的 Object 发布得太早了?这是正常的吗?

2012-08-01 12:41:11.591 MyApp[15437:707] *** -[TabBarDelegate respondsToSelector:]: message sent to deallocated instance 0x194fe0

【问题讨论】:

  • “导致崩溃”没有用。发生什么了?你有堆栈跟踪吗?它说什么?
  • @Jim 我并没有真正得到一个像样的堆栈跟踪,但我编辑了我的答案,忘了提到它是 EXC_BAD_ACCESS。对此感到抱歉。 :)

标签: ios xcode delegates interface-builder storyboard


【解决方案1】:

不保留 IBOutlets。您需要对您的标签栏委托进行强引用,以使其保持足够长的时间以供您的视图使用。现在它在视图加载后立即释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多