2013-04-23 43 views
1

的点击我很新的Objective-C和可能很容易解决,但无法找到任何地方的答案....添加+1到一个变量上的按钮将错号码

我想在用户每次点击一次添加+1到一个变量上的按钮,但不是增加+1它增加了+4

- (IBAction)addNewSet:(UIButton *)sender { 
    NSLog(@"%i",_sliderTag); 
    _sliderTag += 1; 
    NSLog(@"ADD NEW %i",_sliderTag); 
} 

_sliderTag已经是一个NSInteger

@property (nonatomic,assign) NSInteger* sliderTag; 

第一个NSLog打印0和添加完成后的第二个打印4。谁能解释为什么?这意味着打印0第一个,因为这个变量的要点是设置标签的计数器。

+0

因为您将sliderTag声明为一个指针而不是int。甚至不需要看你的财产声明来说明。 – 2013-04-23 21:03:10

+0

正如其他人在他们的答案中所说的,你正在使用一个指向'NSInteger'的指针。 'NSInteger'不是一个类(它表示),而是一个类似于int的类型定义。 – HAS 2013-04-23 21:03:28

+0

@HAS - 不是它是否是一个类,而是它是否是一个指针。当你用C增加一个指针时,你增加了指向的元素的大小。一个不应该使用int指针的指针。 – 2013-04-23 21:05:15

回答

6

听起来像_sliderTag是一个指向大小为4个字节的类型的指针。给指针加1会使它指向的类型的大小递增。下面的两个例子都说明了区别:

NSInteger foo = 0; 
foo += 1; 
NSLog(@"result: foo = %d", foo); // result: foo = 1 

NSInteger *bar = 0;     // note the '*' 
bar += 1; 
NSLog(@"result: bar = %d", bar); // result: bar = 4 
+0

_sliderTag已经是NSInteger – 2013-04-23 21:00:45

+2

这是因为你声明它为一个指针'NSInteger *',删除这个星号。 sizeof(* _ sliderTag)'在您的系统上恰好为4,并且将指针增加1将导致打印地址为4。 – Joe 2013-04-23 21:01:06

+2

@JonathanThurft - sliderTag是*不是NSInteger,它是一个指向NSInteger的指针。完全不同的东西。 (在Objective-C中进行任何更远的编程之前,您需要知道的区别) – 2013-04-23 21:06:32

1

第一,确保_sliderTag是int或整型或诠释,而不是整数*或者int *,第二,不要用%我打印出来,但与%d

+0

为什么不用%i打印?当你打印他们做同样的,看到这个问题:http://stackoverflow.com/questions/1893490/difference-between-format-specifiers-i-and-d-in-printf – HAS 2013-04-24 07:01:51

+0

只是我曾经这样,所以我把它写在我的电脑上 – Dima 2013-04-24 07:07:16