将 NSString 与 UITextField 文本进行比较永远不会被调用

Posted

技术标签:

【中文标题】将 NSString 与 UITextField 文本进行比较永远不会被调用【英文标题】:Comparing NSString to UITextField text never gets called 【发布时间】:2013-03-18 16:32:08 【问题描述】:

我在UITextField 中记录了文本的值,我想稍后将文本与原始文本字段值进行比较。我尝试了这样的事情,但我从来没有得到 NSLog 被显示。任何想法为什么?

defaultTopicText = topicTextField.text;
if ([topicTextField.text isEqualToString:defaultTopicText])
    NSLog(@"YES");
else
    NSLog(topicTextField.text);
    NSLog(defaultTopicText);

代码看起来一模一样就像你看到的那样。我分配值的第一行和另一行 - 我与它进行比较。而且它没有被调用。

编辑:

代码本身 IS 被调用,当我将它们放入 NSLog 时,我也得到相同的值。问题可能是文本字段包含@"\n" 字符吗?

NSLog 给了我这个:

2013-03-18 20:45:22.037 myapp[524:907] 

Here comes the text
2013-03-18 20:45:22.039 myapp[524:907] 

Here comes the text

【问题讨论】:

这段代码什么时候被调用?你是否设置了断点来检查它是否真的被调用了? @CainaSouza 在ViewDidLoad 里面有一些@"\n\n" 您是否验证了topicTextField 在调用时不是nil @SergiusGee 这是一个问题 - 如果这是一个文本字段(不是文本视图),文本值如何有两个前导新行?现在试试if (defaultTopicText isEqualToString:topicTextField.text]) 【参考方案1】:

尝试打印出topicTextField.text 的值并查看显示的内容。否则设置断点以查看您是否到达该特定代码行。

你也可以在删除空格和换行后尝试比较,如果有的话

NSString *trimmmedText = [topicTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

if ([trimmmedText isEqualToString:defaultTopicText])
    NSLog(@"YES");

【讨论】:

这怎么可能是问题?他将文本字段的文本分配给一个变量,然后将该变量与文本字段的文本进行比较。无论有什么文本,这应该比较相等。 @rmaddy if ([topicTextField.text isEqualToString:defaultTopicText])he 正在使用分配的文本检查文本字段文本,因此他的文本字段中可能有空格或换行符。 @nsgulliver 但分配的文本是文本字段文本。他们不可能不同。有多少空白并不重要。 @rmaddy 是的,你是对的,如果他分配相同的文本,那么这不会是一个问题,但最好的方法是打印出文本字段的值并设置断点,看看那里有什么【参考方案2】:

试着改成这样:

NSString *newString = [defaultTopicText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

if ([newString isEqualToString:defaultTopicText])
    NSLog(@"YES");

【讨论】:

【参考方案3】:

我输入了下面的答案... 运行它应该会给你答案:

if(!defaultTopicText)
    NSLog(@"defaultTopicText is nil");
else
    NSLog(@"defaultTopicText is a: %@".[defaultTopicText classname]);


defaultTopicText = topicTextField.text;
if ([topicTextField.text localizedCaseInsensitiveCompare:defaultTopicText] == NSOrderedSame)
    NSLog(@"YES");
else
NSLog(@"\"%@\" != \"%@\"",defaultTopicText, topicTextField.text);

然后我意识到:如果topicTextField.text为nil,使用这种比较方法,它只能和自己不是同一个对象。

topicTextField.text 必须是 nil... 所以它最终会执行:

id var = nil;
[var isEqual:nil];

运行时会返回 0;

...所以把你的出口改成topicTextField

【讨论】:

以上是关于将 NSString 与 UITextField 文本进行比较永远不会被调用的主要内容,如果未能解决你的问题,请参考以下文章

如何从视图控制器的 uitextfield 在类中设置 NSString

iOS----------输入框UITextField禁止输入空格

向单元格中的 uitextfield 添加方法?

UITextField 占位符问题

从 UITextField iPhone 获取用户名密码

在Swift中从NSString创建NSData