Closed CoderHRXu closed 7 years ago
bug已解决,由于循环引用引起的
问一下你这边的循环引用是怎么解决的?
看我提交的解决代码就OK
将self变成弱引用 // 监听更新菜单标题通知 weak typeof (self) wself = self; _observer = [[NSNotificationCenter defaultCenter] addObserverForName:YZUpdateMenuTitleNote object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { strong typeof (wself) self = wself; // 获取列 NSInteger col = [self.controllers indexOfObject:note.object];
// 获取对应按钮
UIButton *btn = self.menuButtons[col];
// 隐藏下拉菜单
[self dismiss];
// 获取所有值
NSArray *allValues = note.userInfo.allValues;
// 不需要设置标题,字典个数大于1,或者有数组
if (allValues.count > 1 || [allValues.firstObject isKindOfClass:[NSArray class]]) return ;
// 设置按钮标题
[btn setTitle:allValues.firstObject forState:UIControlStateNormal];
}];
你这么做也可以,我把接收通知block执行改成了selector 用自定义方法执行。 这个框架还有其他的坑,祝君好运。
加上导航控制器,然后第二次push进来之后,必奔溃,报错的原因和我的一样的.原因是YZPullDownMenu.m里的self.controllers保存的是第一次push进来的自控制器,第二次push进来的时候, NSInteger col = [self.controllers indexOfObject:note.object]; 取不到索引,然后紧接着 UIButton *btn = self.menuButtons[col]; 就会报数组越界的错误