2017-02-21 32 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