将 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");
【讨论】:
这怎么可能是问题?他将文本字段的文本分配给一个变量,然后将该变量与文本字段的文本进行比较。无论有什么文本,这应该比较相等。 @rmaddyif ([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