我想通過子類化NSNumberFormatter在Objective C中編寫自己的自定義格式化程序。具體而言,我想要做的是如果數字高於或低於特定值,則會使數字變爲紅色。 apple documentation表示目標C中的自定義NSFormatter
例如,如果您希望負面財務金額顯示爲紅色,您可以使用此方法返回帶有紅色文本屬性的字符串。在attributesStringForObjectValue:withDefaultAttributes中:通過調用stringForObjectValue獲取非屬性字符串:然後將適當的屬性應用於該字符串。
基於此意見,我採取了以下代碼
- (NSAttributedString*) attributedStringForObjectValue: (id)anObject withDefaultAttributes: (NSDictionary*)attr;
{
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:[self stringForObjectValue:anObject]];
if ([[attrString string] floatValue] < -20.0f) {
[attrString addAttribute:@"NSForegroundColorAttributeName" value:[NSColor redColor] range:NSMakeRange(0, 10)];
return attrString;
} else return attrString;
}
但是當我測試這一切確實是凍結我的應用程序。任何意見,將不勝感激。謝謝。
您的號碼總是有10位數字嗎?你應該使用'NSMakeRange(0,attrString.length)'而不是'NSMakeRange(0,10)'。 – omz
未來,如果你得到了掛載轉儲 - 或者只是在調試器中運行 - 併發布了結果,它確實會有所幫助。只是說它「凍結我的應用程序」意味着每個人都必須猜測可能發生了什麼問題。在這種情況下,結果很可能是未處理的'NSRangeException',但這只是一個猜測;調試器會告訴你,肯定的是,這會讓答案變得明顯。 – abarnert
Abarnet,對不起。你是對的。我應該更具體。我仍然在學習XCode調試器的方法。 – ehsteve