1

我正在尝试实现一个 UIActionSheet,它上面会有一些共享按钮,用于共享到 twitter、facebook、电子邮件和打印。

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

@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

-(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;
}
}

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

- (IBAction)shareButtonTapped:(id)sender {

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

}

我可以很好地打开操作表,但是当我单击任何按钮时,它会使应用程序崩溃。关于为什么的任何想法?

4

3 回答 3

1

是的。转到您的 .xib 文件。

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

单击一个按钮并转到“连接检查器”

删除参考插座。

将引用插座拖到按钮上,并将按钮设置为您想要的“ID”。

让我知道这是否有效。

于 2012-07-16T20:37:28.187 回答
1

这很可能是内存管理问题。看起来您正在使用 ARC,因此在shareButtonTapped方法返回后,ARC 将自动 release svc,因为它不再在任何地方引用。操作表的委托属性是weak,因此它也不会被保留。

我真的不明白为什么ShareViewController首先要使用视图控制器,因为您似乎从未加载过它的视图,但您可能有自己的理由......无论如何,您应该将该控制器设为strong属性或实例变量您的另一个(主)视图控制器,以便在操作表完成之前不会自动释放它。

于 2012-07-16T21:15:15.450 回答
0

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

于 2012-07-16T20:38:26.397 回答