【问题标题】:-[MyDictationController respondsToSelector:] message sent ot deallocated instance-[My Dictation Controller respondsToSelector:] 消息发送到已释放的实例
【发布时间】:2017-05-12 19:30:32
【问题描述】:

我的应用程序因此堆栈跟踪而崩溃:

[DictationDetailsController respondsToSelector:]: message sent to deallocated instance

我在试图查看导致崩溃的相关代码的仪器上跟踪了这一点:

这里是didSelectRowAtIndexPath:委托方法中MyDictationController的相关代码:

- (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath {
        DictationDetailsController *controller = GET_CONTROLLER_WITH_CLASS([DictationDetailsController class]);
        controller.dictation = [unSubmittedDictations objectAtIndex:indexPath.row];
        controller.isEditMode = YES;
        controller.selectedDate = _selectedDate;
        controller.hidesBottomBarWhenPushed = YES;
        [self.navigationController pushViewController:controller animated:YES];
}

@property (copy ,nonatomic) Dictation *dictation;

我也用过@synthesize。帮我解决这个问题,以获取正在调用的释放方法。?

这是我的DictationDetailsController 界面:

@interface DictationDetailsController : BaseController

@property (copy ,nonatomic) Dictation *dictation;
@property (nonatomic) BOOL isEditMode;
@property (nonatomic) NSDate *selectedDate;

@property (weak, nonatomic) IBOutlet UILabel *navigationTitleLabel;
@property (weak, nonatomic) IBOutlet UITextField *patientNameTextField;
@property (weak, nonatomic) IBOutlet UITextField *accountIDTextField;
@property (weak, nonatomic) IBOutlet UITextField *workTypeTextField;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *deleteButtonWidth;
@property (weak, nonatomic) IBOutlet UIView *tutorialView;
@property (weak, nonatomic) IBOutlet UIView *audioContainer;
@property (weak, nonatomic) IBOutlet UISlider *audioSlider;
@property (weak, nonatomic) IBOutlet UILabel *durationLabel;
@property (weak, nonatomic) IBOutlet UILabel *noRecordingLabel;
@property (weak, nonatomic) IBOutlet UIButton *playPauseButton;

@end

dealloc 方法中:

- (void)dealloc {
    [player pause];
    player = nil;
    self.dictation = nil;
}

【问题讨论】:

  • 启用僵尸。它只是意味着您仍然保留一个僵尸实例并仍在尝试调用它的方法。记住格伦已经在行尸走肉中被杀了:(
  • 我已启用 zoombie。它说'[DictationDetailsController respondsToSelector:]:发送到已释放实例的消息'。我怎样才能找到被调用的确切方法。?
  • 我知道在“DictationDetailsController”中调用了一些方法。虽然控制器被弹出。不知道调用的是哪个方法。甚至堆栈跟踪也没有帮助我。
  • 好吧,您似乎仍然强烈引用它的某些属性。也许你可以展示你的 DictationDetailsController 界面?
  • 是否调用了dealloc?您可以在此处设置断点以检查何时弹出 VC

标签: ios objective-c memory-management memory-leaks instruments


【解决方案1】:

我的猜测是问题出在 GET_CONTROLLER_WITH_CLASS 方法中。在该行上弹出一个断点并越过它。它可能正在生成该类的已发布实例。在这种情况下,当它试图访问听写属性时,崩溃将发生在调用该方法之后的那一行。

【讨论】:

    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 2012-05-19
    • 2013-08-17
    • 2013-04-13
    • 1970-01-01
    • 2013-08-14
    • 2011-06-16
    相关资源
    最近更新 更多