我正在使用一个表视图,我想知道为什么我的if语句是false。可能是一个非常简单的错误。我已经调试过了,我看到'message‘包含了tableview单元格的值。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *message = [NSString stringWithFormat:@"%@",[tableViewArray objectAtIndex:indexPath.row]];
NSString *apple = [NSString stringWithFormat:@"Apple"];
if(apple == message)
.....
感谢您的帮助!
发布于 2012-03-14 22:47:11
您正在比较对象。您将希望改用以下代码:
if ([apple isEqualToString:message]) {
// ...
}
发布于 2012-03-14 22:47:57
是的,很简单,您正在比较两个不同变量的地址,它们肯定不是相同的数字:)用于您使用的内容比较
- (BOOL)isEqualToString:(NSString *)aString
请仔细阅读NSString reference,您可能还想找到一些关于c语言基础知识的文献。
发布于 2012-03-14 22:58:19
在本例中,message
是指向内存中NSString
对象的指针地址。当您执行==
时,您比较的是指针的地址,而不是字符串的内容。要比较实际NSString
对象的内容,需要使用适当的方法isEqualToString:
。
在下面的示例中,我创建了两个字符串,并显示了它们具有相同的内容但不同的指针地址。NSLog()
中的%p
打印指针地址
NSString *string1 = [NSString stringWithFormat:@"test"];
NSString *string2 = [NSString stringWithFormat:@"test"];
NSLog(@"(%p == %p) => %d", string1, string2, string1 == string2);
NSLog(@"[string1 isEqualToString:string2] => %d", [string1 isEqualToString:string2]);
=> 2012-03-14 22:55:07.395 Untitled[2797:707] (0x1099146c0 == 0x109914870) => 0
=> 2012-03-14 22:55:07.398 Untitled[2797:707] [string1 isEqualToString:string2] => 1
https://stackoverflow.com/questions/9711386
复制相似问题