为什么这种印刷方法不起作用?

时间:2012-08-01 18:33:52

标签: objective-c printf nslog

当我使用NSLog但不使用printf时,它会起作用。我想使用printf,因为setA中的所有元素都会显示在一行中。

#import <Foundation/Foundation.h>

#define INTOBJ(v) [NSNumber numberWithInteger: v]

@interface NSSet (Printing) 
-(void) print;
@end

@implementation NSSet (Printing)
-(void) print {
    for (NSNumber *element in self) 
        printf("%li", (long) [element integerValue]);
}

@end

int main (int argc, char *argv[]) {
    @autoreleasepool {
        NSMutableSet *setA = [NSMutableSet setWithObjects:INTOBJ(3), INTOBJ(10), INTOBJ(1), INTOBJ(5), nil];

        [setA print];
    }
    return 0;
}

3 个答案:

答案 0 :(得分:0)

NSLog本质上是printf的不同版本,允许使用Objective C,而printf无法处理Objective C材料。

如果你的printf方法不起作用,这可能就是问题所在。

答案 1 :(得分:0)

尝试-longValue代替-integerValue它应该隐式地投射它们,但你永远不知道......

答案 2 :(得分:-1)

首先从作为对象的NSNumber转换为NSInteger,然后可以使用printf语句输出到控制台,并且所有整数应该出现在一行上。

for(NSNumber *element in setA)
{
    NSInteger num = [element intValue];
    printf("%li", (long)num);

}