Xcode 4.3.2 上的 uipopover 冻结问题

Posted

技术标签:

【中文标题】Xcode 4.3.2 上的 uipopover 冻结问题【英文标题】:uipopover freeze issue on Xcode 4.3.2 【发布时间】:2012-05-02 06:59:56 【问题描述】:

你好,我只是想从一个矩形按钮制作一个简单的 uipopover。在以前的 Xcode (4.2) 中,我可以毫无问题地运行它,但是当我尝试在 Xcode 4.3.2 iPad 模拟器上运行此代码时,当我按下 rect 按钮时它会冻结/挂起。谁能帮我? 这是我的代码

在头文件中:

@interface popViewViewController : UIViewController <UIPopoverControllerDelegate> 




-(IBAction)showPop:(id)sender;


@end

实施文件:

#import "popViewViewController.h"
#import "infoView.h"

@interface popViewViewController ()


@end

@implementation popViewViewController

-(IBAction)showPop:(id)sender 

    infoView *infoview = [[infoView alloc] init];
    UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:infoview];
    [pop setDelegate:self];
    [pop presentPopoverFromRect:[sender bounds] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUnknown animated:YES];
    [pop setPopoverContentSize:CGSizeMake(300, 200)];



这里是错误显示的地方:

#import "popViewAppDelegate.h"

int main(int argc, char *argv[])

    @autoreleasepool 
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([popViewAppDelegate class]));
    

“线程 1:信号 SIGABRT”

谢谢。

【问题讨论】:

您可以发布信息视图的代码吗?你是如何添加 popViewViewController 的?我在您发布的部分中没有看到任何不正确的地方。 实际上这只是一个试用代码,因为在我的实际项目中它只是表现相同(冻结)。这就是为什么我创建这个简单的新项目,但我不知道为什么它会一直冻结。我已经尝试删除整个 Xcode 并重新安装,但仍然无法正常工作。知道我的代码没有任何问题,真是令人沮丧。也许我稍后会尝试完全重新安装我的 osx lion。附言。我有两台 iMac,我在另一台 iMac 上使用 4.2 Xcode 上的代码,它运行得很好,没有任何冻结。 ow 和我的 infoView 不包含代码,只是默认创建的标准。 嗯,我认为你的代码有问题,但不是这部分。我猜重新安装或从头开始不会有帮助。我想看看 infoView 控制器,因为在我看来问题就在那里。 下面是 infoView 控制器。 【参考方案1】:

显然问题不在我预期的 InfoView 中。一个问题,你用的是ARC吗?如果是这样,请尝试将 popovercontroller 保持为强属性。对此的可能解释是,在 ARC 中,弹出框将在离开方法时自动释放。如果您没有使用 ARC,我没有任何其他线索,抱歉。

【讨论】:

很抱歉问这个问题,但我真的很菜鸟。 ARC到底是什么? 你应该谷歌它以获得全部信息,但它是自动引用计数,即自动内存管理。您是否尝试过我提出的 ivar 解决方案? 好吧,ARC 似乎确实是个问题。该死的,我一直在浪费我的 5 天来发现这一点。我现在很高兴。再次感谢天使的帮助。【参考方案2】:

如果这里的帮助是 infoView 控制器:

infoView.h:

#import <UIKit/UIKit.h>

@interface infoView : UIViewController

@end

infoView.m:

#import "infoView.h"

@interface infoView ()

@end

@implementation infoView

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.


- (void)viewDidUnload

    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    return (interfaceOrientation == UIInterfaceOrientationPortrait);


@end

【讨论】:

以上是关于Xcode 4.3.2 上的 uipopover 冻结问题的主要内容,如果未能解决你的问题,请参考以下文章

无法从另一个类中关闭 UIPopover

如何将 UIPopover 附加到我绘制的矩形

为啥在尝试将 UIPopover 附加到不同类中的 UIButton 时出现此构建错误?

更改 Xcode 4.3.2 的 iPad/iPhone 模拟器分辨率 [重复]

UIPopOver 标题和副标题

当模态视图可见且 iPad 旋转时,UIPopover 的内容会更改为随机方向