iThinkerYZ / YZPullDownMenuDemo

快速继承搜索界面下拉菜单
MIT License
208 stars 42 forks source link

加上导航控制器,然后第二次push进来之后,必奔溃 #3

Closed CoderHRXu closed 7 years ago

CoderHRXu commented 8 years ago

加上导航控制器,然后第二次push进来之后,必奔溃,报错的原因和我的一样的.原因是YZPullDownMenu.m里的self.controllers保存的是第一次push进来的自控制器,第二次push进来的时候, NSInteger col = [self.controllers indexOfObject:note.object]; 取不到索引,然后紧接着 UIButton *btn = self.menuButtons[col]; 就会报数组越界的错误 2222

CoderHRXu commented 8 years ago

bug已解决,由于循环引用引起的

tangzzz-fan commented 8 years ago

问一下你这边的循环引用是怎么解决的?

CoderHRXu commented 8 years ago

看我提交的解决代码就OK

LvChao0608 commented 7 years ago

将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];

}];
CoderHRXu commented 7 years ago

你这么做也可以,我把接收通知block执行改成了selector 用自定义方法执行。 这个框架还有其他的坑,祝君好运。