Ios 使用UITextfield和undo崩溃

Ios 使用UITextfield和undo崩溃,ios,objective-c,uitextfield,Ios,Objective C,Uitextfield,今天我完成了我的第一个应用程序,我正在测试我的应用程序。我发现了一个从哪里找不到的bug。在我的应用程序中,我有两个UITextField。当用户填写其中一个时,另一个将使用委托方法textField:ShouldChangeCharactersRange:replacementString自动完成: 这里是方法。当用户在任何文本字段中键入任何内容,然后按下iPad键盘上的“撤消”按钮,或者摇动iPhone,然后按下“撤消”按钮时,我的应用程序崩溃。这是我收到的错误 (Terminating a

今天我完成了我的第一个应用程序,我正在测试我的应用程序。我发现了一个从哪里找不到的bug。在我的应用程序中,我有两个UITextField。当用户填写其中一个时,另一个将使用委托方法textField:ShouldChangeCharactersRange:replacementString自动完成: 这里是方法。当用户在任何文本字段中键入任何内容,然后按下iPad键盘上的“撤消”按钮,或者摇动iPhone,然后按下“撤消”按钮时,我的应用程序崩溃。这是我收到的错误

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

我认为您必须在应用程序中更改UIUndoManager的实现。检查本教程

如果您不想在应用程序中处理要撤消的抖动,则可以使用以下方法禁用它:

    [UIApplication sharedApplication].applicationSupportsShakeToEdit = NO;