2017-02-21 7 views
1

私はこれらの2つのクラスメソッドを持っていますが、それぞれに述語があります。関数は、mapKitとUITable Viewに表示される情報を保持することです。しかし、私は述語を除いて、繰り返しコードを見る。私の質問です:どのようにこれらの繰り返しを避けることができますか?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)プレゼント 'その中で、述語を除き、その値をチェックし、正しい述語を作成する以外は同じことを行います。 +(NSArray *)型{return [self spotWithType:type present:YES]} '+(NSArray *)型は、 NO];} '? 'executeFetchRequest:error:'のために別の方法でログを記録する場合は、 'NSError'パラメータを追加することができます。 – Larme

答えて

1

共有プライベートメソッドに共通のコードを配置しているコードの重複を削減する最も基本的な方法:

+0

説明ありがとうございます:) – FuManchu

関連する問題