ARC и Popovers и делегаты - PullRequest
       38

ARC и Popovers и делегаты

1 голос
/ 07 марта 2012

Я вырываю волосы, я перенес свой старый проект в дугу, и у меня появляется эта ошибка: * Завершение работы приложения из-за необработанного исключения 'NSGenericException', причина: '- [ UIPopoverController dealloc] достигнут, пока всплывающее окно все еще видно. '

Я прочитал некоторые темы, и я запутался, некоторые говорят, что при использовании делегатов использовать слабую ссылку, но с другой стороны, при использовании всплывающих окон использовать сильную ссылку на свойство, может кто-нибудь дать мне пример того, как лучше всего использовать 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 ]

1 голос
/ 07 марта 2012

Вы не должны создавать локальную переменную для хранения контроллера popover.

Изменить это

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

до

self.currentPopover = [[UIPopoverController alloc] initWithContentViewController:timerTextColor];
1 голос
/ 07 марта 2012

Назначить currentPopover.Звоните

currentPopover = pop

после создания поповера

...