Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么不是';这种打印方法行得通吗?_Objective C_Printf_Nslog - Fatal编程技术网

Objective c 为什么不是';这种打印方法行得通吗?

Objective c 为什么不是';这种打印方法行得通吗?,objective-c,printf,nslog,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 {

当我使用
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;
}
#导入
#定义为BJ(v)[NSNumber-numberWithInteger:v]
@接口NSSet(打印)
-(作废)打印;
@结束
@实现NSSet(打印)
-(作废)打印{
for(自身中的NSNumber*元素)
printf(“%li”,(长)[元素整数值];
}
@结束
int main(int argc,char*argv[]){
@自动释放池{
NSMutableSet*setA=[NSMutableSet setWithObjects:INTOBJ(3)、INTOBJ(10)、INTOBJ(1)、INTOBJ(5)、nil];
[setA打印];
}
返回0;
}

NSLog本质上是printf的一个不同版本,它允许使用Objective C材料,而printf不能处理Objective C材料


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

尝试
-longValue
而不是
-integerValue
它应该隐式转换它们,但您永远不知道…

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

#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;
}

我假设你想在iOS设备上运行这个,对吗?如果您在模拟器中运行,
printf
也应该可以工作。这里也回答了这个问题:[[1]:不。他正确地获取了值-但不是正确的值。OP已经在这样做了,甚至正在使用正确的方法获取一个
NSInteger
integerValue
intValue
返回一个
int