UIActionSheet在iOS6中运行良好,但在iOS7中崩溃 - 数据结构出错

时间:2013-12-03 09:50:05

标签: ios pdf ios7 uiactionsheet

编辑:错误与PDF生成期间使用的数据结构有关。一旦我得到支持iOS7的OSX副本,我就能调试它。感谢所有人的帮助!

在工作中,我有Mac致力于开发iOS 6应用程序。到目前为止,还无法更新到更新版本的OSX,因此我的XCode版本无法升级为自然支持iOS7。长话短说我无法调试iOS7应用程序,所以我不确定应用程序崩溃的原因。

我有一张UIActionSheet。我曾经使用过一个带有那些完成块但是试图调试所以我已经把所有东西都剥夺了基本的准系统,当我点击按钮时它仍然会崩溃。

UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Send by Email", @"Send To...", @"Open In...", nil ];
[actionSheet showFromBarButtonItem:sender animated:YES];

这就是PDF生成方法的结尾。

有什么想法吗?我整个下午一直在研究这个问题,但我没有找到任何理由让它停止工作。我确实尝试将操作表存储为视图控制器中的数据,因此保留了引用,但无济于事。

我正在使用ARC。

编辑:我尝试了一个具有相同结果的UIAlertView。也许这是PDF背景以某种方式破坏了事情?

感谢所有人的帮助。

编辑:解决这个问题的重大突破:在我的操作表/模式对话框/警报视图之前评论我的PDF生成代码时,它会毫无怨言地打开。所以这是一种混合问题,我会在这里发布我的大多数方法,这样每个人都可以看到了什么:

-(void)shareTapped:(id)sender
{
    if (actionSheet.isVisible)
        return;

    if (![MFMailComposeViewController canSendMail])
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No mail setup" message:@"You must setup your email in the main settings app before you can share." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        return;
    }

    for( NSIndexPath *indexPath in self.tableView.indexPathsForSelectedRows )       
    {
        // should only get run once due to UI
        Calculation* calc = [self.fetchedResultsController objectAtIndexPath:indexPath];
        NSString *filename = [calc.name stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString *path = [[[[self applicationDocumentsDirectory] path] stringByAppendingPathComponent:filename] stringByAppendingPathExtension:@"ipc"];
        [[PPCalculation sharedInstance] openCalculation:path];
    }
    [[PPCalculation sharedInstance] calculate];

    // let's generate the PDF here!
    NSMutableData* pdfData = [[NSMutableData alloc] init];
    UIGraphicsBeginPDFContextToData( pdfData, CGRectZero, nil );
    UIGraphicsBeginPDFPage();

    // 200 lines of drawing commands here

    UIGraphicsEndPDFContext();

    // save to file
    NSString* path;
    for( NSIndexPath *indexPath in self.tableView.indexPathsForSelectedRows )
    {
        // should only get run once due to UI
        Calculation* calc = [self.fetchedResultsController objectAtIndexPath:indexPath];
        NSString* filename = [calc.name stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        path = [[[[self applicationDocumentsDirectory] path] stringByAppendingPathComponent:filename] stringByAppendingPathExtension:@"pdf"];
        [[NSFileManager defaultManager] createFileAtPath:path
                                                contents:pdfData
                                              attributes:nil];
    }

    // ActionSheet, modal dialog, composer dialog, alert view, all of them crash when I try to put them here
    UIActionSheet* sheet = [[UIActionSheet alloc] initWithTitle:@"Share" delegate:nil cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Send By Email", nil];
    [sheet showFromBarButtonItem:sender animated:YES];
}

再次感谢你们。

编辑:似乎从我的调查和评论事件逐行排出并通过TestFlight将它们发送到设备,它的内部数据结构在某种程度上无法正常工作,这很奇怪,应用程序的其余部分工作正常。我可能会得到Mountain Lion的副本或其他东西,所以我可以正确调试这个东西。

3 个答案:

答案 0 :(得分:0)

尝试下面的代码......可能会帮助你......

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Send by Email", @"Send To...", @"Open In...", nil];
//actionSheet.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
actionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
actionSheet.tag = ((UIButton*)sender).tag;
[actionSheet showFromRect:[(UIButton*)sender frame] inView:[(UIButton*)sender superview] animated:YES];

答案 1 :(得分:0)

通过纯粹的反复试验和评论代码,我已将其缩小到PDF生成本身。在C ++数据结构的某些地方,正在发生的事情正在使iOS7变得悲伤但其他人却很好。我设法说服老板订购Mountain Lion,所以一旦到货,我可以直接为iOS7构建并正确调试。

答案 2 :(得分:-1)

试试这将帮助您您的栏按钮操作方法:

UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:nil: delegate:nil cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Send by Email", @"Send To...", @"Open In...", nil ];

[actionSheet showInView:self.view];