我正在撕扯我的头发,我已将我的旧项目迁移到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
我做错了什么?
答案 0 :(得分:1)
分配currentPopover。 致电
currentPopover = pop
弹出创建后
答案 1 :(得分:1)
你不应该创建一个局部变量来存储弹出控制器。
更改此
UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:timerTextColor];
到
self.currentPopover = [[UIPopoverController alloc] initWithContentViewController:timerTextColor];