【问题标题】:Objective-c deallocated when opening a new form?打开新表单时,Objective-c 被释放?
【发布时间】:2018-05-08 13:11:07
【问题描述】:

下午好。

应用运行时内存出错。

[5133:307051] *** -[DeclarantController 保留]:消息发送到已释放实例 0x7f9e53d22b50

在后台线程中请求数据后打开表单。

dispatch_async(dispatch_get_main_queue(), ^{
                        DeclarantController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DeclarantController"];
                        viewController.consultData = self.consultData;
                        viewController.parentView = self;
                        [self.navigationController pushViewController:viewController animated:YES];
                    });

简化了控制器,但是如果放入 viewDidLoad 方法调用 getDeclarantKind 会弹出错误。如果您注释掉,则不会发生错误。即使使用空方法也会发生错误。

@implementation DeclarantController : BaseController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self tableColor];
    [self getDeclarantKind];
}

-(NSMutableArray*)getDeclarantKind
{

}
@end

当如下算法:

  1. 打开一个表单,上面有一个转换到 B 的按钮
  2. 在后台进程中打开表单 B 的 API 请求。如果响应来自表单打开 C
  3. Form C 正常工作
  4. 返回在表单 B 上滑动,然后滑动到表单和
  5. 重复项目 1-3。表单打开
  6. 返回在表单 B 上滑动,然后滑动到表单和
  7. 重复项目 1-3。 Form C 打开,但按钮会滑动。单击屏幕的任何区域后,main.m 中有一个错误

    int main(int argc, char *argv[]) { @autoreleasepool { 返回 UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }

线程 1:EXC_BREAKPOINT(代码=EXC_I386_BPT,子代码=0x0)

大多数人不明白为什么错误只在第 3 次通过时触发。前2个工作。如果你想删除 [self getDeclarantKind]; 相同的表单会被渲染并且工作正常。

【问题讨论】:

  • 你加分了吗?

标签: ios objective-c


【解决方案1】:

我无法告诉您确切的问题或崩溃的原因。但是您可以尝试为您的项目/工作区添加异常断点。这将为您提供导致崩溃的确切陈述。

希望对你有帮助。

编码愉快!

【讨论】:

    【解决方案2】:

    程序执行不会在发生错误的地方停止。再次主要失败。我手找不到弹出错误的方法。因为表单设计有错误但没有错误,但是当你在屏幕上按下鼠标时会出现错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2011-04-17
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多