2014-04-20 45 views
1

今天我完成了我的第一個應用程序,我正在測試我的應用程序。那麼,我發現了一個我從找不到它的地方找不到的錯誤。在我的應用程序中,我有兩個UITextfields。當用戶填寫其中一個時,其他自動完成使用代理方法textField:shouldChangeCharactersInRange:replacementString: 這裏是方法。當用戶在任何文本框內鍵入任何內容並按下iPad鍵盤上的撤消按鈕或晃動iPhone然後按撤消時,我的應用程序崩潰。這是我收到的錯誤。使用UITextfield崩潰並撤銷

(Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSBigMutableString substringWithRange:]: Range {0, 2} out of bounds; string length 0'). 

我真的很感謝你的幫助。

-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

    NSString *stringToValidate = [[textField text] stringByReplacingCharactersInRange:range withString:string]; 

    if ([stringToValidate isEqualToString:@""]) { 

     self.scoreToAddOfTeam1.text = nil; 

     self.scoreToAddOfTeam2.text = nil; 



     return YES; 

    } 

    if ([self validateInputsInsideAnNSString:stringToValidate]) { 

     if (textField == self.scoreToAddOfTeam1) { 

      self.scoreToAddOfTeam2.text = [self autocompleteOthersTeamPointsToAdd:stringToValidate]; 

     } else { 

      self.scoreToAddOfTeam1.text = [self autocompleteOthersTeamPointsToAdd:stringToValidate]; 

     } 

    } else { 

     if (textField == self.scoreToAddOfTeam1) { 

      self.scoreToAddOfTeam2.text = nil; 

     } else { 

      self.scoreToAddOfTeam1.text = nil; 

     } 

    } 



    return YES; 

} 

-(NSString *) autocompleteOthersTeamPointsToAdd: (NSString *) stringBasedToCalculate { 

    NSString *myString = [NSString stringWithFormat:@"%ld", (long)100 - [stringBasedToCalculate integerValue]]; 

    return myString; 
} 

回答

0

我認爲你必須在你的應用程序中更改UIUndoManager的實現。檢查本教程here

如果你不想處理抖動在您的應用程序撤消,那麼你可以使用禁用它:

[UIApplication sharedApplication].applicationSupportsShakeToEdit = NO;