gpt4 book ai didi

iphone - iOS insertSubview :belowSubview: crashing with SIGABRT

转载 作者:行者123 更新时间:2023-12-01 18:25:09 24 4
gpt4 key购买 nike

我有一个自定义 TabbarViewController这基本上隐藏了标准选项卡 View 。我附加了一个按钮,当按下该按钮时,会在屏幕上显示一个菜单。长时间使用该应用程序时一切正常,但在某些时候它会崩溃并出现 EXC_BAD_ACCESSSIGABRT .

奇怪的是当我添加了 NSLog打印 tabbarControllermenuView在检查 menuView 是否是 tabbarController 的 subview 之前,它在 NSLog 上崩溃了行(在我看来,其中一个已被释放,但没有明确调用,它们都被保留)。

这种崩溃从未在模拟器上发生过。关于有什么问题的任何想法?

AppDelegate.h

UIButton *ribbon;
RibbonMenu* menu;
@property (nonatomic, retain) CustomTabbarController* tabbarController;
@property (nonatomic, retain) UIView* menuView;

AppDelegate.m
@synthesize tabbarController;
@synthesize menuView;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
tabbarController = [[CustomTabbarController alloc] init];
[tabbarController setTabBarHidden:YES animated:NO];
tabbarController.viewControllers = [NSArray arrayWithObjects: EventsNavigation, StyleNavigation, BrandNavigation, MemberNavigation, settingsNavigation, nil];

ribbon = [UIButton buttonWithType:UIButtonTypeCustom];
[ribbon retain];
UIImage* img = [UIImage imageNamed:@"toppart.png"];
[ribbon setImage:img forState:UIControlStateNormal];
ribbon.frame = CGRectMake(234,0,86,97);
//MENU SELECTOR
[ribbon addTarget:self action:@selector(didClickMenu) forControlEvents:UIControlEventTouchUpInside];
[tabbarController.view addSubview:ribbon];

self.window.rootViewController = tabbarController;
[self.window makeKeyAndVisible];
}


- (void) didClickMenu {
if (!menuView) {
menu = [[RibbonMenu alloc] init];
menuView = menu.view;
menuView.backgroundColor = [UIColor clearColor];
[blinkTimer invalidate];
ribbon.selected = NO;
}

if ([tabbarController.view.subviews containsObject:menuView]) {
[self removeMenu];
} else {
menuView.frame = CGRectMake(235,-370,82,432);
//**CRASH HERE**
[tabbarController.view insertSubview:menuView belowSubview:ribbon];
[UIView transitionWithView:menuView
duration:0.2
options:UIViewAnimationOptionCurveLinear
animations:^ { menuView.frame = CGRectMake(235,0,82,432);}
completion:nil];
}
}

-(void) removeMenu {
[UIView transitionWithView:menuView
duration:0.2
options:UIViewAnimationOptionCurveLinear
animations:^ { menuView.frame = CGRectMake(235,-370,82,432);}
completion:^(BOOL finished) {[menuView removeFromSuperview];}];
}

这是崩溃日志
Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0

Last Exception Backtrace:
0 CoreFoundation 0x35a5388f __exceptionPreprocess + 163
1 libobjc.A.dylib 0x33677259 objc_exception_throw + 33
2 CoreFoundation 0x35a53789 +[NSException raise:format:] + 1
3 CoreFoundation 0x35a537ab +[NSException raise:format:] + 35
4 UIKit 0x33313cf1 __windowForView + 157
5 UIKit 0x33155ccd -[UIView(Hierarchy) _postMovedFromSuperview:] + 21
6 UIKit 0x3315680d -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1169
7 UIKit 0x33172071 -[UIView(Hierarchy) insertSubview:belowSubview:] + 29
8 MyAppName 0x000c6af3 -[AppDelegate didClickMenu] (AppDelegate.m:247)

最佳答案

这种崩溃也应该发生在模拟器上。在 didClickMenu您尝试访问 menuView。但是,从外观上看,您没有名为 menuView 的实例变量。您有一个 房产 调用 menuView,但您需要使用 self.menuView 调用此属性.

或者,如果您使用的是 Xcode 4.4 或更高版本并且您没有合成您的属性,编译器将为您创建一个实例变量。此实例变量与属性同名,但带有 _ 前缀——在本例中为 _menuView .

关于iphone - iOS insertSubview :belowSubview: crashing with SIGABRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com