ARC 和 Popovers 和代表
Posted
技术标签:
【中文标题】ARC 和 Popovers 和代表【英文标题】:ARC and Popovers and delegates 【发布时间】:2012-03-07 12:14:14 【问题描述】:我正在撕扯我的头发,我已将我的旧项目迁移到 arc 并且我收到此错误:* 由于未捕获的异常“NSGenericException”而终止应用程序,原因:'- [UIPopoverController dealloc] 在 popover 仍然可见时到达。'
我已经阅读了一些线程并且我很困惑,有人说在使用委托时使用弱引用,但另一方面在使用弹出框时使用强属性引用,有人可以给我一个如何最好地使用 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
我做错了什么?
【问题讨论】:
【参考方案1】:分配 currentPopover。 打电话
currentPopover = pop
创建弹出框后
【讨论】:
谢谢!我的重点是弧线,我是盲目的!这段代码在 arc 之前工作,所以我什至没有考虑将我的本地分配回我的实例变量!再次感谢您指出这一点。【参考方案2】:您不应该创建一个局部变量来存储弹出框控制器。
改一下
UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:timerTextColor];
到
self.currentPopover = [[UIPopoverController alloc] initWithContentViewController:timerTextColor];
【讨论】:
以上是关于ARC 和 Popovers 和代表的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 3.2 中为 Twitter Bootstrap 的“bootstrap-popover.js”设计“popovers”样式
如何使用 Xcode Storyboards 创建 Popovers
如何在 reactstrap 的 Popovers 中正确使用延迟?