2012-08-01 105 views
0

它適用於我使用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; 
} 
+0

我假設你想在iOS的設備上運行,對嗎?如果你在模擬器中運行,'printf'應該也能工作。 – dasblinkenlight 2012-08-01 18:40:08

+1

你想做什麼? – Dustin 2012-08-01 18:40:20

+0

問題被這裏ansered以及: [http://stackoverflow.com/questions/8924831/iphone-debugging-real-device][1] [1]:HTTP:/ /stackoverflow.com/questions/8924831/iphone-debugging-real-device – user1567896 2012-08-01 18:43:06

回答

0

的NSLog本質上是一個不同版本的printf允許Objective C的東西,而printf的無法處理的目標C材料。

如果你的printf方法不工作,這可能是問題所在。

+0

不。他正確地獲得價值 - 只是不正確。 – 2012-08-01 19:25:31

0

嘗試-longValue代替-integerValue應該隱含轉換它們,但你永遠不知道...

-1

從NSNumber的轉換是將對象轉換爲一個NSInteger第一,那麼你就可以輸出到與你的printf語句控制檯,所有的整數應該出現在一行上。

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

} 
+0

OP已經這樣做了,甚至使用正確的方法來獲得'NSInteger':'integerValue'。 'intValue'返回一個'int'。 – 2012-08-01 19:44:43

相關問題