ARC和Popovers和代表

时间:2012-03-07 12:14:15

标签: delegates automatic-ref-counting uipopovercontroller popover

我正在撕扯我的头发,我已将我的旧项目迁移到arc并且我出现此错误: * 由于未捕获的异常'NSGenericException'而终止应用程序,原因:' - 当弹出窗口仍然可见时,[UIPopoverController dealloc]到达。'

我已阅读了一些线程并且我很困惑,有人说当使用委托时使用弱引用但另一方面当使用popovers使用强大的属性引用时,有人可以给我一个如何最好地使用ARC的示例和一个弹出窗口的代表,里面有一个按钮,可以改变背景颜色,例如?

根据我的阅读,我一直听到在我的视图控制器中使用了一个实例变量,这里是在我的主视图控制器中:

@property (nonatomic, strong) UIPopoverController *currentPopover;

是主视图控制器文件中的方法实现:

- (IBAction)ShowPopTextColor:(id)sender {

if (currentPopover == nil) {

TimerTextColor *timerTextColor = [[TimerTextColor alloc]init];
timerTextColor.delegate =self;
UIPopoverController *pop = [[UIPopoverController                  alloc]initWithContentViewController:timerTextColor];
[pop setDelegate:self];
    [pop setPopoverContentSize:CGSizeMake(320, 240)];
[pop presentPopoverFromBarButtonItem:sender       permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

//[pop release];

} else {

   [currentPopover dismissPopoverAnimated:YES];
    currentPopover = nil;
}

}

这是我的弹出内容标题:

@protocol colorChooserDelegate

-(void) colorSelected:(UIColor*)thecolor;

@end

@interface TimerTextColor : UIViewController{

id<colorChooserDelegate> delegate;

IBOutlet UIButton *colorView;

}

- (IBAction)buttonTapped:(id) sender;
@property (nonatomic,strong) id<colorChooserDelegate>delegate;
@property (nonatomic,strong) UIButton *colorView;

@end

我做错了什么?

2 个答案:

答案 0 :(得分:1)

分配currentPopover。 致电

currentPopover = pop
弹出创建后

答案 1 :(得分:1)

你不应该创建一个局部变量来存储弹出控制器。

更改此

UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:timerTextColor];

self.currentPopover = [[UIPopoverController alloc] initWithContentViewController:timerTextColor];