У меня есть собственный класс под названием «Сайт»:
#import "Site.h"
#import <MapKit/MapKit.h>
@implementation Site
@synthesize name, desc, coordinate;
+ (Site*) siteWithName:(NSString *)newName
andDescription:(NSString *)newDesc
andLatitude:(double)newLat
andLongitude:(double)newLon
{
Site* tmpSite = [[Site alloc] initWithName:newName
andDescription:newDesc
andLatitude:newLat
andLongitude:newLon];
[tmpSite autorelease];
return tmpSite;
}
- (Site*) initWithName:(NSString *)newName
andDescription:(NSString *)newDesc
andLatitude:(double)newLat
andLongitude:(double)newLon
{
self = [super init];
if(self){
self.name = newName;
self.desc = newDesc;
coordinate.latitude = newLat;
coordinate.longitude = newLon;
return self;
}
return nil;
}
- (NSString*) title
{
return self.name;
}
- (NSString*) subtitle
{
return self.desc;
}
- (BOOL)isEqual:(id)other {
if (other == self)
return YES;
if (![super isEqual:other])
return NO;
return [[self name] isEqualToString:[other name]]; // class-specific
}
- (NSUInteger)hash{
return [name hash];
}
- (void) dealloc
{
[name release];
[desc release];
[super dealloc];
}
@end
У меня есть NSMutableSet с именем allSites, к которому я добавляю другие наборы сайтов с помощью метода unionSet. Это работает, и наборы сайтов все добавляются в набор allSites. Но дубликаты сайтов не удаляются. Я подозреваю, что это как-то связано с ошибкой с моей стороны в реализации isEqual или хэш-кода Site, которую, как я понимаю, NSMutableSet использует для обеспечения уникальности.
Любое понимание будет с благодарностью.