首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UIActionSheet中单击按钮会导致我的应用程序崩溃

在UIActionSheet中单击按钮会导致我的应用程序崩溃
EN

Stack Overflow用户
提问于 2012-07-17 04:32:00
回答 3查看 1.4K关注 0票数 1

我正在尝试实现一个UIActionSheet,它将有一些分享按钮上,以分享到推特,脸书,电子邮件和印刷品。

这是我的共享视图控制器.h

代码语言:javascript
复制
@interface ShareViewController : UITableViewController <UIActionSheetDelegate, MFMailComposeViewControllerDelegate>
@property (nonatomic, strong) NSMutableDictionary *services;
@property (strong, nonatomic) UIActionSheet *actionSheet;
@property (strong, nonatomic) id <ShareViewControllerDelegate> delegate;
@property (nonatomic, strong) UIPopoverController *popCon;
@property (nonatomic, strong) NSString *serviceTitle;

-(IBAction)loadActionSheet:(id)sender;
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex;
- (void)tweetThis;
- (void)printThis;
- (void)openMail;
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error;


@end

这是我的共享视图控制器。m

代码语言:javascript
复制
-(IBAction)loadActionSheet:(id)sender{
if (self.actionSheet) {
            // do nothing
} 
else {
UIActionSheet *sharing = [[UIActionSheet alloc] 
                          initWithTitle:nil 
                          delegate:self 
                          cancelButtonTitle:nil 
                          destructiveButtonTitle:nil 
                          otherButtonTitles:@"Twitter", @"Facebook", @"Email", @"Print", nil];

[sharing showFromBarButtonItem:sender animated:YES];
}
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{

     NSLog(@"Button index: %d",buttonIndex);
switch (buttonIndex) {
    case 0:
        [self tweetThis];
        break;
    case 1:
        [self sendToFacebook];
        break;
    case 2:
        NSLog(@"email");
        [self openMail];
        break;
    case 3:
        NSLog(@"Print");
        [self printThis];
        break;
    default:
        NSLog(@"Error");
        break;
}
}

我在主视图控制器.m中初始化共享视图控制器,如下所示:

代码语言:javascript
复制
- (IBAction)shareButtonTapped:(id)sender {

ShareViewController *svc = [[ShareViewController alloc] initWithStyle:UIActionSheetStyleDefault];
[svc loadActionSheet:(id)sender];

}

我可以很好地打开动作单,但当我点击任何一个按钮时,它就会使应用程序崩溃。有什么想法可以解释原因吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-17 05:15:15

这很可能是内存管理问题。看起来你使用的是ARC,所以在shareButtonTapped方法返回后,ARC会自动释放svc,因为它不再被引用。动作表的委托属性是weak,因此它也不会被保留。

我真的不明白为什么ShareViewController是一个视图控制器,因为您似乎从来没有加载过它的视图,但您可能有自己的原因……在任何情况下,您都应该使该控制器成为另一个(主)视图控制器strong属性或实例变量,这样它就不会在操作表完成之前自动释放。

票数 1
EN

Stack Overflow用户

发布于 2012-07-17 04:37:28

是。转到您的.xib文件。

您应该会看到您拥有的所有按钮。

单击一个按钮并转到"Connections Inspector“

删除引用插座。

将参考插座拖到按钮上,并将按钮设置为所需的"ID“。

如果有效的话,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2012-07-17 04:38:26

这只是一个愚蠢的答案--像-(空) sendToFacebook;这样的方法是实现的,对吧?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11512056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档