gpt4 book ai didi

iphone - 当从 UIViewController 文件移动到单独的类文件时,UIActionSheet 代码崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:19:33 25 4
gpt4 key购买 nike

我已经搜索并搜索了电路板,但无法解决这个问题。它必须是简单且就在我面前的东西。

我正在尝试清理我的代码并使其更易于重用。我正在使用一些从 UIViewController 工作的 UIActionSheet 代码并制作它自己的目标文件。工作正常,直到我添加 UIActionSheetDelegate 方法。

当按下按钮时,它没有触发 actionSheetCancel 方法,而是崩溃且没有堆栈跟踪。每次。

我的代码如下。任何帮助,将不胜感激。我的猜测是因为我没有使用 xcode Storyboard工具将事物连接在一起,但我认为这是合法的。

egcTestSheet.h:

#import <UIKit/UIKit.h>

@interface egcTestSheet : NSObject <UIActionSheetDelegate> {

}

- (void) showSheet:(UITabBar *) tabBar
displayTitle:(NSString *) name;

@end

egcTestSheet.m

#import "egcTestSheet.h"

@implementation egcTestSheet

-(void) showSheet:(UITabBar *)tabBar displayTitle:(NSString *)name{

UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:name
delegate:self
cancelButtonTitle:@"Done"
destructiveButtonTitle:@"Cancel"otherButtonTitles:nil];

[menu showFromTabBar:tabBar];
[menu setBounds:CGRectMake(0,0,320, 700)];

}

// actionsheet delegate protocol item
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex: (NSInteger)buttonIndex{

NSLog(@"button index = %d", buttonIndex);
}


- (void)actionSheetCancel:(UIActionSheet *)actionSheet{

NSLog(@"in action canceled method");
}

@end

从 UIViewController 对象调用代码:

egcTestSheet *sheet = [[egcTestSheet alloc] init];

[sheet showSheet:self.tabBarController.tabBar displayTitle:@"new test"];

最佳答案

您的操作表可能正在发布,因为它已被取消(您使用的是 ARC 吗?)。这意味着当它试图调用它的委托(delegate)来通知所述委托(delegate)其解雇/选择时,它正在尝试调用自己。这时候self是一个悬挂指针,因为它已经被释放了。

在呈现/调用此操作表的 View Controller 中,设置一个属性以保留对操作表的引用。在关闭操作表时将该属性设置为 nil。

关于iphone - 当从 UIViewController 文件移动到单独的类文件时,UIActionSheet 代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285020/

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