Сбой приложения: нераспознанный селектор, отправленный экземпляру " - PullRequest
0 голосов
/ 23 июня 2019

Кнопка «Назад» в моем приложении, когда она нажата, корректно возвращает меня к главному виду / экрану, затем приложение вылетает, экран отладки дает мне следующее:

Завершение работы приложения из-за невыполненияисключение '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 голосов
/ 23 июня 2019

Если компилятор жалуется, что вы должны использовать «invalidate» вместо «stop», и во время выполнения «invalidate» не распознается, то я подозреваю, что вы используете старую скомпилированную библиотеку вместе с новыми несовместимыми заголовочными файлами.

Скажем, версия 1.0 вашей библиотеки использовала "стоп". Вы получили заголовочные файлы 2.0, в которых метод был изменен на «аннулировать», но вы продолжаете использовать скомпилированную библиотеку 1.0.

Но обычно это вызвано ссылкой на объект, объявленный как одна вещь, тогда как фактический объект - это другая вещь.

0 голосов
/ 23 июня 2019

Похоже, это может быть связано с тем, что метод invalidate не является распознанным селектором.Попробуйте использовать [RLMRealmNotificationToken stop]; вместо их документации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...