UIPopoverController - 提交时的SIGABRT

时间:2012-03-21 21:22:18

标签: ios uipopovercontroller

我正在尝试在按下barButton时显示popoverView。不幸的是,每次我尝试调用它时,应用程序都会发出SIGABRT信号。 “Empty.xib”确实有一个设计的视图。 (因为我正在使用barButton,我无法使用框架,如果您有解决方法,请同样说明。)

- (IBAction)loadPopover:(id)sender 
{
    UIView *someView = [[UIView alloc] init];
    UIViewController *someVC = [[UIViewController alloc] initWithNibName:@"Empty.xib" bundle:[NSBundle mainBundle]];
    UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:someVC];

    someView.frame = CGRectMake(0, 44, 320, 372);
    someView.backgroundColor = [UIColor lightGrayColor];

    popoverController.delegate = self;

    self.popoverView = popoverController;

    [self.popoverView presentPopoverFromBarButtonItem:sender  permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    // CGRect popoverRect = [self.view convertRect:[btn frame] fromView:[btn superview]];

    CGRect popoverRect = CGRectMake(0, 88, 320, 311);

    popoverRect.size.width = MIN(popoverRect.size.width, 100); 
    [self.popoverView presentPopoverFromRect:popoverRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];    
}

2 个答案:

答案 0 :(得分:0)

这里很少有建议。

  1. 检查view的插座是否已连接

  2. 为什么需要像以下一样分配UIViewUIView *someView = [[UIView alloc] init];

  3. 检查发件人的类型是否为UIBarButtonItem

  4. self.popoverView的保留政策是什么?检查它是retain还是strong(如果是ARC)

  5. 为什么要两次出示popover?

  6. 说这是一个简单的片段。

    UIBarButtonItem* barButton = (UIBarButtonItem*)sender;
    
    UIViewController *someVC = [[UIViewController alloc] initWithNibName:@"Empty" bundle:[NSBundle mainBundle]];
    
    UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:someVC];
    
    popoverController.delegate = self;
    
    self.popoverView = popoverController;
    
    [self.popoverView setPopoverContentSize:CGSizeMake(300, 200)];
    
    [self.popoverView presentPopoverFromBarButtonItem:barButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    

    P.S。如果不使用ARC,请注意记忆。

    希望它有所帮助。

答案 1 :(得分:0)

.xib移除initWithNibName:@"Empty.xib"部分。将行改为:

UIViewController *someVC = [[UIViewController alloc] initWithNibName:@"Empty" bundle:nil];

修改
来自here -

  

nib文件名不应包含任何前导路径信息。