将数字添加到停靠图标

Posted

技术标签:

【中文标题】将数字添加到停靠图标【英文标题】:Adding a number to the dock icon 【发布时间】:2009-12-12 05:12:29 【问题描述】:

这是我的代码:

for (NSManagedObject *object in array) 
    if ([[object valueForKey:@"DueDate"] isLessThan:[NSDate date]]) 
        count++;
        NSLog(@"Looped");
        NSString *test = [[NSString alloc] initWithFormat:@"%@", [object valueForKey:@"DueDate"]];
        NSLog(@"%@", test);
    

NSLog(@"%i", count);
NSDockTile *aTitle = [[NSApplication sharedApplication] dockTile];
[aTitle setBadgeLabel:[NSString stringWithFormat:@"%i", count]];

由于某种原因,这段代码在停靠图标应该是 2 时添加了 8

【问题讨论】:

旁白:isLessThan: 用于脚本支持。你应该(IIRC)使用if ([[object valueForKey:@"DueDate"] compare:[NSDate date]] == NSOrderedAscending) 【参考方案1】:

您基于什么理由声称它应该是 2?显然,数组中有八个对象的到期日期小于当前日期(顺便说一句,您为每次循环创建一个新对象)。

这些托管对象的DueDate 属性值的类别是什么? (不要为此查看您的模型 - 发送到期日期值 class 消息并使用 NSLog 记录结果。)它们可能不是 NSDates,并且它们的 compare: 方法是,而不是当被要求与 NSDate 进行比较时抛出异常,只是返回废话。

此外,为什么不将此 is-less-than-X-date 测试作为谓词包含在您用于获取这些对象的提取请求中?然后(在确保到期日期值是 NSDates 之后)您可以简单地使用数组的 count。当然,这是假设您没有对显示的代码之外的较大结果数组执行其他操作。

【讨论】:

DueDate 类 NSLog 返回 __NSCFDate。所以我认为那是 NSDate? 可能。测试的方法是记录[NSDate date] 的类。 那么是的,他们都是 NSDate。除非你能找到另一个问题,否则我只能得出结论,你有比当前日期早的日期比你想象的要多。您可以通过自己记录日期来验证这一点 ([array valueForKey:@"DueDate"])。 不,[array valueForKey:@"DueDate"] 不返回 8。它返回一个数组,除非 array 实际上不是一个数组(在这种情况下,您要么错误地命名了该变量,要么存在内存管理问题)。如果您的意思是count 是 8,那么我看不出有什么问题;您只需有八个小于当前日期的日期。记录项目的DueDate(使用[array valueForKey:@"DueDate"] 消息)将证明这一点。

以上是关于将数字添加到停靠图标的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将应用程序图标添加到安装时停靠

Cocoa:在运行时添加另一个停靠图标

在 OS X 的停靠栏上下文菜单中显示图标?

阻止 QProgressDialog 使停靠图标反弹

OSX 上的 QT:托盘图标 - 图标 Dock 问题

Cocoa osx:为所有正在运行的应用程序在停靠元素上添加一个菜单项