我正在尝试实施一个UIActionSheet,它上面会有一些共享按钮,用于分享到Twitter,Facebook,电子邮件和打印。
这是我的共享视图controller.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
这是我的共享视图controller.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];
}
我可以打开操作表,但是当我点击任何按钮时,它会崩溃应用程序。关于为什么的任何想法?
答案 0 :(得分:1)
是。转到.xib文件。
你应该看到你拥有的所有按钮。
单击按钮,然后转到“Connections Inspector”
删除引用插座。
将引用插座拖到按钮上,然后将按钮设置为所需的“ID”。
如果有效,请告诉我。
答案 1 :(得分:1)
这很可能是内存管理问题。看起来您正在使用ARC,因此在shareButtonTapped
方法返回后,ARC将自动释放svc
,因为它不再在任何地方引用。操作表的委托属性为weak
,因此它也不会保留。
我真的不明白为什么ShareViewController
首先是一个视图控制器,因为你似乎从来没有加载它的视图,但你可能有你的理由......无论如何,你应该做该控制器是另一个(主)视图控制器的strong
属性或实例变量,因此在操作表完成之前不会自动释放它。
答案 2 :(得分:0)
只是一个愚蠢的答案 - 像 - (void)sendToFacebook这样的方法;实施了,对吧?