1
我有這兩個類方法,每個方法都有它的謂詞。它們的功能是保存要在mapkit和UITable視圖中顯示的信息。但是我看到重複的代碼,除了謂詞;我的問題是:我怎樣才能避免這些重複?減少使用NSPredicate的方法重複代碼
+ (NSArray*)spotType:(NSString*)type{
NSPersistentContainer *persistenceContainer = [AppDelegate sharedDelegate].persistentContainer;
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"type =%@", type];
NSManagedObjectContext *context = persistenceContainer.viewContext;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Spot"];
[request setPredicate:predicate];
NSError *error;
NSArray *result = [context executeFetchRequest:request error:&error];
if (error != nil) {
NSLog(@"[Spot spotType] -> %@", [error localizedDescription]);
return nil;
}
return result;
}
+ (NSArray*)spotWithType:(NSString*)type{
NSPersistentContainer *persistenceContainer = [AppDelegate sharedDelegate].persistentContainer;
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"NOT (type = %@)", type];
NSManagedObjectContext *context = persistenceContainer.viewContext;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Spot"];
[request setPredicate:predicate];
NSError *error;
NSArray *result = [context executeFetchRequest:request error:&error];
if (error != nil) {
NSLog(@"[Spot spotWithType] -> %@", [error localizedDescription]);
return nil;
}
return result;
}
可以編寫'+(NSArray的*)spotWithType:(的NSString *)本發明類型: (BOOL)present'。在這裏你可以做同樣的事情,除了謂詞,檢查它的值並創建正確的謂詞。然後'+(NSArray *)spotType:(NSString *)type {return [self spotWithType:type present:YES]}'and'+(NSArray *)spotWithType :(NSString *)type {return [self spotWithType:type present: NO];}'?如果你想對你的'executeFetchRequest:error:'進行不同的記錄,你可以添加一個'NSError'參數。 – Larme