我很好奇如何覆盖对象执行以下操作时使用的描述方法(见下文)。我基本上想要更好地格式化输出,但我不确定如何设置它。
NSLog(@"ARRAY: %@", myArray);
非常感谢
虽然子类化NSArray会起作用,但我决定将一个类别添加到NSArray(之前没有使用过)这是我添加的内容......
// ------------------------------------------------------------------- **
// CATAGORY: NSArray
// ------------------------------------------------------------------- **
@interface NSArray (displayNSArray)
-(NSString*)display;
@end
@implementation NSArray (displayNSArray)
-(NSString*)display {
id eachIndex;
NSMutableString *outString = [[[NSMutableString alloc] init] autorelease];
[outString appendString:@"("];
for(eachIndex in self) {
[outString appendString:[eachIndex description]];
[outString appendString:@" "];
}
[outString insertString:@")" atIndex:[outString length]-1];
return(outString);
}
@end
加里
答案 0 :(得分:2)
如果你这么做很多,重新格式化数组显示的最简单方法是在NSArray类中添加一个新的prettyPrint
类别。
@interface NSArray ( PrettyPrintNSArray )
- (NSSTring *)prettyPrint;
@end
@implementation NSArray ( PrettyPrintNSArray )
- (NSString *)prettyPrint {
NSMutableString *outputString = [[NSMutableString alloc] init];
for( id item in self ) {
[outputString appendString:[item description]];
}
return outputString;
}
@end
显然你需要改变for循环以获得你想要的格式。
答案 1 :(得分:2)
我假设你的myArray变量是NSArray / NSMutableArray类的一个实例。
当NSLog()在其格式字符串中遇到@字符时,它会在对象上调用-description:方法。这是根类NSObject上的一个方法,所有其他Cocoa类都从该方法继承。 -description:返回一个NSString,允许任何实现此方法的对象传递到NSLog(@“@”,anyObject)并具有格式良好的输出。返回的字符串可以是您需要构建的任何内容。
对于您的特定问题,您可以继承NSMutableArray并使用您自己的实现覆盖-description:方法。然后使用您的子类而不是NSMutableArray。
有关NSObject和-description的更多信息:请参阅Apple's docs。
答案 2 :(得分:1)
NSString支持为ANSI C functionprintf()定义的格式字符,以及任何对象的“@”。如果对象响应descriptionWithLocale:消息,则NSString发送该消息以检索文本表示,否则,它发送描述消息。
因此要自定义数组到字符串的转换,您应该更改NSArray descriptionWithLocale:implementation。这是example如何在运行时替换对象方法。