我有一个NSMutableArray,其中每个项目都是NSMutableDictionary。
NSMutableAray *services = [NSMutableArray new];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject: aNetService forKey: @"net_service"];
[dict setObject: [aNetService name] forKey: @"net_service_name"];
[self.services addObject:dict];
然后我想根据“net_service_name”键检索一个项目。所以,我尝试了以下内容:
-(void)netServiceBrowser:(NSNetServiceBrowser *)aBrowser didRemoveService:(NSNetService *)aNetService moreComing:(BOOL)more {
NSLog(@"netservname%@",[aNetService name]);
for (int i = 0; i < [services count]; i++)
{
NSDictionary *dict = [services objectAtIndex:i];
NSLog(@"netservname%@",[dict objectForKey:@"net_service_name"]);
if ([NSString stringWithFormat:@"%@",[dict objectForKey:@"net_service_name"]] == [NSString stringWithFormat:@"%@",[aNetService name]]){
NSLog(@"Match");
}
}
}
在控制台中,NSLog(@“netservname”)都是相同的,但我没有收到“匹配”消息。谁能明白为什么?非常感谢!
答案 0 :(得分:2)
尝试使用
if ([[dict objectForKey:@"net_service_name"] isEqualToString:[aNetService name]])
。
==
检查身份,即两个对象是否指向相同的内存地址。
isEqualToString
检查是否相等,在这种情况下,两个字符串是相同顺序的相同字符。
答案 1 :(得分:2)
[[dict objectForKey:@"net_service_name"] isEqualToString:[aNetService name]]
试试。
答案 2 :(得分:2)
试试这个:
[[NSString stringWithFormat:@"%@",[dict objectForKey:@"net_service_name"]] isEqualToString:[NSString stringWithFormat:@"%@",[aNetService name]]]
或
[[dict objectForKey:@"net_service_name"] isEqualToString:[aNetService name]]
NSString isEqualToString:(NSString*)
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html
答案 3 :(得分:2)
因为Objective-C使用指针来处理所有内容,所以无法直接将字符串与==运算符进行比较。你在寻找的是:
[string isEqualToString: otherString]
答案 4 :(得分:2)
始终使用isEqualToString:
进行NSString
比较。
(一般情况下,始终使用isEqual:
及其变体进行NSObject
比较)
NSObject*
和NSString*
是指针,因此==
执行指针比较,只有当指针指向内存中完全相同的地址时才是真的,这是绝对的在这种情况下,isEqualToString:
检查字符串的内容是否相同。
此外,你应该更喜欢你的for循环的快速枚举形式,并避免做像stringWithFormat:@"%@"
这样完全没用的东西(你正在使用只包含......另一个字符串的格式创建一个字符串。为什么你不直接使用字符串本身吗?)
// NSFastEnumeration for to loop thru a NSArray
for (NSDictionary *dict in services)
{
NSLog(@"netservname%@",[dict objectForKey:@"net_service_name"]);
// Loose the [NSString stringWithFormat:@"%@",...] stuff!!
if ([[dict objectForKey:@"net_service_name"] isEqualToString:[aNetService name]]) {
NSLog(@"Match");
}
}
答案 5 :(得分:0)
尝试用这个替换if语句:
if ([[dict objectForKey:@"net_service_name"] compare:[aNetService name]] == NSOrderedSame) {
NSLog(@"Match");
}