NSObject equality

In your NSObject, if you implement isEqual, make sure you also implement hash.

For a container object like:

@interface Member : NSObject

@property (assign, nonatomic) int memberId;
@property (copy, nonatomic) NSString *name;

@end

Implement it like this:

- (BOOL)isEqual: (id)other {
	return ([other isKindOfClass:[Member class]]
		&& [other memberId] == memberId);
}

// Providing that memberId is unique
- (NSUInteger)hash {
	return memberId;
}

FMDatabase and LIKE

FMDatabase using LIKE with a query like

SELECT * FROM member WHERE name LIKE '%member%'

translates to this:

NSDictionary *argsDict = [NSDictionary dictionaryWithObjectsAndKeys:
					  [NSString stringWithFormat:@"%%%@%%", searchTerm], @"name",
					  nil];

NSString *q = @"SELECT * FROM member WHERE name LIKE :name";
FMResultSet *s = [database executeQuery:q withParameterDictionary:argsDict];

And not to this:

NSDictionary *argsDict = [NSDictionary dictionaryWithObjectsAndKeys:
					  [NSString stringWithFormat:@"%@", searchTerm], @"name",
					  nil];

NSString *q = @"SELECT * FROM member WHERE name LIKE '%:name%'";
FMResultSet *s = [database executeQuery:q withParameterDictionary:argsDict];

If you’re using named parameters (:name), then you can’t put quotes around them.

MKMapView

You need to set the region before the view is loaded.

E.g.

MKMapView *mapView;
MKCoordinateRegion region;
//...
[mapView regionThatFits:region];
[mapView setRegion:region animated:TRUE];

Should be called before viewDidLoad, for example in viewWillLayoutSubviews.