按下应用程序中的“后退”按钮后,可以正确地将我带到主视图/屏幕,然后应用程序崩溃,“调试”屏幕显示以下信息:
由于未捕获的异常'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]));
}
}
答案 0 :(得分:0)
类似的原因可能是由于“无效”方法不是公认的选择器。尝试使用[RLMRealmNotificationToken stop];
代替他们的documentation
答案 1 :(得分:0)
如果编译器抱怨您应该使用“无效”而不是“停止”,并且在运行时无法识别“无效”,那么我会怀疑您正在使用旧的编译库以及新的不兼容的头文件。
说图书馆的1.0版使用了“停止”。您收到了2.0头文件,其中方法更改为“无效”,但是您继续使用已编译的1.0库。
但是通常这是由于引用对象声明为一件事而导致的,而实际对象是另一件事。