2017-02-21 88 views
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; 
} 
+0

可以編寫'+(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

回答

1

減少代碼複製被放置公共代碼到一個共享私有方法的最基本的方法:

+0

謝謝你的解釋:) – FuManchu