diff --git a/baRSS/Status Bar Menu/BarMenu.m b/baRSS/Status Bar Menu/BarMenu.m index 52b1fee..abd0bc3 100644 --- a/baRSS/Status Bar Menu/BarMenu.m +++ b/baRSS/Status Bar Menu/BarMenu.m @@ -129,10 +129,14 @@ // 3. set unread count & enabled header for all parents NSArray *itms = [self.unreadMap itemsForPath:item.submenu.titleIndexPath create:NO]; for (UnreadTotal *uct in itms.reverseObjectEnumerator) { - [item.submenu setHeaderHasUnread:uct]; - [item setTitleCount:uct.unread]; - item = item.parentItem; + if (item) { // nil on last loop (aka main menu, see below) + [item.submenu setHeaderHasUnread:uct]; + [item setTitleCount:uct.unread]; + item = item.parentItem; + } } + // call on main menu + [self.statusItem.mainMenu setHeaderHasUnread:itms.firstObject]; // TODO: need to re-create groups if user chose to hide already read articles } } diff --git a/baRSS/Status Bar Menu/MapUnreadTotal.m b/baRSS/Status Bar Menu/MapUnreadTotal.m index c7f64f6..67cb011 100644 --- a/baRSS/Status Bar Menu/MapUnreadTotal.m +++ b/baRSS/Status Bar Menu/MapUnreadTotal.m @@ -14,15 +14,12 @@ - (instancetype)initWithCoreData:(NSArray*)data { self = [super init]; if (self) { - UnreadTotal *sum = [UnreadTotal new]; - _map = [NSMutableDictionary dictionaryWithCapacity:data.count]; - _map[@""] = sum; + _map = [NSMutableDictionary dictionaryWithCapacity:data.count + 1]; + _map[@""] = [UnreadTotal new]; for (NSDictionary *d in data) { NSUInteger u = [d[@"unread"] unsignedIntegerValue]; NSUInteger t = [d[@"total"] unsignedIntegerValue]; - sum.unread += u; - sum.total += t; for (UnreadTotal *uct in [self itemsForPath:d[@"indexPath"] create:YES]) { uct.unread += u; @@ -37,6 +34,7 @@ - (NSArray*)itemsForPath:(NSString*)path create:(BOOL)flag { NSMutableArray *arr = [NSMutableArray array]; NSMutableString *key = [NSMutableString string]; + [arr addObject:_map[@""]]; for (NSString *idx in [path componentsSeparatedByString:@"."]) { if (key.length > 0) [key appendString:@"."];