У меня есть контроллер представления, когда он разбирается с завершением, я отправляю уведомление и в подзадаче, содержащемся в другом контроллере представления, добавил как оберегающий. Но, когда он пытается выполнить метод post notificaiton, exec_bad_access происходит. что не так? Коды:NSNotificationCenter postNotificationName exec_badaccess
BrandListByIdViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSNumber *bid = self.brands[indexPath.row][@"id"];
[self dismissViewControllerAnimated:YES completion:^{
[[NSNotificationCenter defaultCenter] postNotificationName:@"SelectedBrandId" object:nil];
}];
}
SearchNewProduct.h
@interface SearchNewProduct : UIView
@end
SearchNewProduct.m
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didSelectedBrandId::) name:@"SelectedBrandId" object:nil];
}
}
- (void)didSelectedBrandId:(NSNotification *)notif{
NSLog(@"%s", __PRETTY_FUNCTION__);
}
Даже я избавлюсь от userInfo, все еще плохой доступ. Я создал аналогичную ситуацию в другом новом проекте, он отлично работает.
'bid' не должен быть выпущен, потому что он является членом словаря пользовательской информации (который сохраняет свои значения и копирует свои ключи) – dreamlax
Я попытался применить метод postNotificationName до завершения увольнения. Независимо от того, где я помещаю код. В конечном итоге этот диспетчер представлений отклонит. Я попробовал делегата, но, похоже, он не работает. метод делегата не будет выполняться в uiview. –
Изменен мой ответ. Я думал, что вы имеете дело с двумя ViewControllers. Делегат принадлежит к VC. Вы можете использовать метод делегирования и позволить VC, которому принадлежит этот View, обработать его или попробовать исправленный ответ выше. –