应用程序崩溃,原因:无法识别的选择器发送到实例”

时间:2019-06-23 19:17:00

标签: objective-c

按下应用程序中的“后退”按钮后,可以正确地将我带到主视图/屏幕,然后应用程序崩溃,“调试”屏幕显示以下信息:

  

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[RLMRealmNotificationToken invalidate]:无法识别的选择器发送到实例0x600003bd57e0

我使用Debug逐步浏览了代码,并查看了崩溃前执行的最后一行代码。

在代码中,我看到此错误“线程1:信号SIGABRT”,并在这里阅读到这很可能与IBAction在“后退”按钮上无法正常工作有关,但无法确定问题出在代码的何处。我的项目按编码方式未在情节提要板上显示“后退”按钮。

这是定义CustomBackButton的代码。

#import "ViewControllerHelper.h"
#import "ProfileRealm.h"

@interface ViewControllerHelper ()

- (void)setCustomTitle;
- (void)setCustomBackButton;
- (void)profilesAction:(id)sender;

@end

@implementation ViewControllerHelper

- (id)initWithViewController:(UIViewController *)viewController       andProfile:(ProfileRealm *)profile {
    self = [super init];
    if(self) {
        _viewController = viewController;
        _profile = profile;

        [self setCustomTitle];
        [self setCustomBackButton];
    }
    return self;
}

- (void)setCustomTitle {
    if (_profile == nil)
        return;

    NSMutableAttributedString *string = [[NSMutableAttributedString     alloc] initWithString:_profile.name];

    UIFont *font1 = [UIFont boldSystemFontOfSize:15.0];
    [string addAttribute:NSFontAttributeName value:font1 range:NSMakeRange(0, string.length)];

    [string appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n"]];

    NSUInteger start = string.length;

    [string appendAttributedString:[[NSMutableAttributedString alloc] initWithString:_profile.friendlyName]];
    UIFont *font = [UIFont boldSystemFontOfSize:15.0];
    [string addAttribute:NSFontAttributeName value:font range:NSMakeRange(start, string.length - start)];

    NSMutableParagraphStyle *paragrapStyle = [[NSMutableParagraphStyle alloc] init];
    paragrapStyle.alignment = NSTextAlignmentCenter;
    [string addAttribute:NSParagraphStyleAttributeName value:paragrapStyle range:NSMakeRange(0, string.length)];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,0,44,44)];
    [titleLabel setAttributedText:string];
    [titleLabel setNumberOfLines:2];
    //    [titleLabel setTextColor:[UIColor whiteColor]];

    _viewController.navigationItem.titleView = titleLabel;
}

- (void)setCustomBackButton {
    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithImage:  [UIImage imageNamed:@"monkeys"]
                                                                     style:UIBarButtonItemStylePlain
                                                            target:self     action:@selector(profilesAction:)];
    _viewController.navigationItem.leftBarButtonItem = item;
}

- (void)profilesAction:(id)sender {
    //MARK - App Crashes after next line is executed
    [_viewController.tabBarController.navigationController  popViewControllerAnimated:YES];
}

@end


    //Post Crash, I get a SIGABRT error in the main file
    // Here is that code:

    #import <UIKit/UIKit.h>
    #import "AppDelegate.h"

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

2 个答案:

答案 0 :(得分:0)

类似的原因可能是由于“无效”方法不是公认的选择器。尝试使用[RLMRealmNotificationToken stop];代替他们的documentation

答案 1 :(得分:0)

如果编译器抱怨您应该使用“无效”而不是“停止”,并且在运行时无法识别“无效”,那么我会怀疑您正在使用旧的编译库以及新的不兼容的头文件。

说图书馆的1.0版使用了“停止”。您收到了2.0头文件,其中方法更改为“无效”,但是您继续使用已编译的1.0库。

但是通常这是由于引用对象声明为一件事而导致的,而实际对象是另一件事。