0

これは私が得たものです

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't do regex matching on object <UITextField: 0x7165730; frame = (121 208; 179 30); text = 'mail@test.com'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7166ca0>; layer = <CALayer: 0x715ed50>>.'
*** First throw call stack:
(0x1c94012 0x10d1e7e 0xbfbb5e 0xb38bae 0xb383dc 0xb37e9a 0x3c04 0x29a9 0x10e5705 0x1c920       0x1c8b8 0xdd671 0xddbcf 0xdcd38 0x4c33f 0x4c552 0x2a3aa 0x1bcf8 0x1befdf9 0x1befad0 0x1c09bf5 0x1c09962 0x1c3abb6 0x1c39f44 0x1c39e1b 0x1bee7e3 0x1bee668 0x1965c 0x1f95 0x1e95)
libc++abi.dylib: terminate called throwing an exception

大きすぎる場合は申し訳ありませんが、そのエラーがわかりません。古いデバイスでアプリがクラッシュし、そのTextFieldでアプリがクラッシュすることがなかったため、.xibAutolayoutを無効にしました。これはメールのテキストフィールドです。

前もって感謝します。

編集:

私のコード:

NSString *mail = [email.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if ([self validarEmail:mail])
{
   // code
}

-(BOOL) validarEmail:(NSString *) mail // From internet made for objective-c
{
BOOL stricterFilter = YES;
NSString *stricterFilterString = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSString *laxString = @".+@.+\\.[A-Za-z]{2}[A-Za-z]*";
NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:email];
}

私がコメントした場合、アプリは問題ありませんが、そうでない場合はクラッシュします。

前もって感謝します

4

3 に答える 3

4

代わりに、オブジェクトのプロパティで正規表現をテストUITextFieldするつもりだったとしたら、オブジェクトで正規表現をテストしようとしています。text

OPが質問を編集してから編集

この行に注意してください:

return [emailTest evaluateWithObject:email];

'email'オブジェクトはテキストフィールドであり、文字列ではありません。文字列が呼び出されmailます(パラメータとしてメソッドに渡されます。

于 2013-01-21T10:34:53.910 に答える
1

UITextFieldオブジェクトを正規表現に渡そうとしています。正規表現に送信するオブジェクトがNSStringであることを確認してください。そうでない場合、このエラーが発生します。

あなたは次のようなものを使用する必要があります

NSString *myString = textField.text;

次に、そのNSStringを正規表現に渡します。

正規表現関数を頻繁に使用する場合は、渡す変数がNSStringであることを確認して、将来の例外を防ぐ必要があります。

if ([myString isKindOfClass:[NSString class]]) { /* Code */ }
于 2013-01-21T11:43:04.210 に答える
1

問題はこの行にあります:

return [emailTest evaluateWithObject:email];

次のいずれかに変更する必要があります。

return [emailTest evaluateWithObject:email.text];

また

return [emailTest evaluateWithObject:mail];
于 2013-01-21T11:54:48.950 に答える