我希望能做到这样的事情:
在netServiceBrowser:didFindService:moreComing:
[self.foundServices addObject:aNetService];
并在netServiceBrowser:didRemoveService:moreComing:
[self.foundServices removeObject:aNetService];
但是,返回的服务不会被NetServiceBrowser保留,因此didRemoveService
中给出的服务与数组中的服务不同。如何比较服务以确保我删除的服务是正确的?
答案 0 :(得分:5)
你过度思考这个问题,并在脑海中创造一个不存在的问题。对传递给removeObject:
的对象使用didRemoveService:
。 removeObject:
根据对象对isEqual:
的响应而删除,而不是对象的地址或标识。所以这才会奏效。
答案真的很简单:
[self.foundServices removeObject:aNetService];
Apple对removeObject:
的描述解释了这一点:
此方法使用
indexOfObject:
查找匹配项,然后使用removeObjectAtIndex:
删除它们。因此,匹配是根据对象对isEqual:
消息的响应来确定的。
(为了完整起见,Apple 确实提供了一个按地址删除对象的功能。那就是removeObjectIdenticalTo:
。但这不是你想要的行为。只需使用removeObject:
。)
参考文献:
答案 1 :(得分:0)
简短的回答,我最终不得不使用它,但我再也无法重现这个问题了。使用选定的答案。
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
[self.foundServices addObject:aNetService];
}
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
NSNetService *found = nil;
for(NSNetService *ns in self.foundServices) {
if([ns isEqualTo:aNetService]) {
found = ns;
}
}
if(found) {
[self.foundServices removeObject:found];
}
}