2012-07-19 134 views
0

我想为我的计算器应用程序实现一个删除键。我对这个伪代码为:为什么我的NSRange始终为0?

foo = length of current number 
bar = length of current number-1 

current number = current number with character at index (foo-bar) removed 

要做到这一点在Objective-C我已经尝试了本使用NSRange功能还有StringbyappendingString方法来实现:

- (IBAction)DelPressed { 
if ([self.display.text length] >=2) 
{ 

    int len = [self.display.text length];//Length of entire display 

    //Add to the brainlong printing out the length of the entire display 
    self.brainlog.text = [NSString stringWithFormat:@"Len is %g",len]; 

    int le = ([self.display.text length]-1);//Length of entire display - 1 
    NSString *lestring = [NSString stringWithFormat:@"LE is %g",le]; 

    //Add to the brainlog printing out the length of the display -1 
    self.brainlog.text = [self.brainlog.text stringByAppendingString:lestring];  

    NSRange range = NSMakeRange(le, len);//range only includes the last character 

    self.display.text = [self.display.text stringByReplacingCharactersInRange:range withString:@" "];//Replace the last character with whitespace 
} 

输出到brainlog(即这两个文件和len)的长度为:

Len is -1.99164 Le is -1.99164 

很难看到,但这里的数字I输入使用的iOS模拟器计算器的图像: iOS sim picture

我试图改变乐的价值(即使它的显示长度-3或-5等),le和len都是一样的。

我也试图让乐参考长度:

int len = [self.display.text length];//Length of entire display 
    //Add to the brainlong printing out the length of the entire display 
    self.brainlog.text = [NSString stringWithFormat:@"Len is %g",len]; 


    int le = len-1; 

但两者的值仍然是相同的。我如何使用NSRange删除显示的最后一个字符?

编辑:使用达斯汀的修复,我现在已经减少了一个相当长的功能分为6行代码:

-(IBAction)DelPressed{ 
    if ([self.display.text length] >=2) 
    { 
     self.display.text = [self.display.text substringToIndes:[self.display.text length] -1]; 
    } 
} 
+0

%G也是double类型的格式说明,请尝试使用%d为int型。 – adc 2012-07-19 18:33:29

+1

“brainlog”究竟是什么?也许我错过了一些东西,但是看起来这里的真正问题与'NSRange'没有任何关系,而应该是关于如何将字符串的长度存储为int并以负浮点数结尾代替。你有没有尝试过使用NSLog(@“len是%d”,len)'来验证'len'的值? – 2012-07-19 18:39:44

+0

'brainlog'只是另一个'UILabel',用于记录已被按下的操作符以及数字。在这种情况下,我将它用作打印语句以查看我的方法出了什么问题。我已经尝试了NSlog的方式,并得到了相同的结果,总是一些浮动... – ironcyclone 2012-07-19 18:45:32

回答

4

使用substring代替;如果你只想删除最后一个字符,那就好多了。

更具体地说,substringToIndex(/*length-1*/)

检查this reference,如果你需要做其他事情用绳子

+0

谢谢,像一个魅力工作 – ironcyclone 2012-07-20 21:21:42