将数字添加到停靠图标
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"]
消息)将证明这一点。以上是关于将数字添加到停靠图标的主要内容,如果未能解决你的问题,请参考以下文章