2

これらのオブジェクトは、一度2つの列を除いて一意ですが、そのうちの1回はUITableViewの表示として使用しています。 UITableViewはこれにより重複を表示することがよくあります。私は何とかこれらの複製をフィルタリングする必要があります。同じ名前のオブジェクトを削除するためにNSFetchedResultsControllerをフィルタリングします。

FetchResultでdistinctResultを設定すると、NSFetchedResultsControllerの機能が制限され、管理対象オブジェクトのサブクラスではなくREsultTypeがNSDictionaryである必要があるため、この場合は機能しません。

述語を使用してこれらの重複をどのようにフィルタリングすることができますか?これらのオブジェクトの各フィールドは、2つを除いて一意です。

-(NSFetchedResultsController *) fetchGroupedObjects:(NSString *)entityDescription 
             sortField:(NSString *)sortField 
            withPredicate:(NSPredicate *)predicate { 

BPRAppDelegate *delegate = (BPRAppDelegate *)[UIApplication sharedApplication].delegate; 
NSManagedObjectContext *context = delegate.managedObjectContext; 
//NSError *error; 

//Fetch the data.... 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription 
           entityForName:entityDescription inManagedObjectContext:context]; 
[fetchRequest setEntity:entity]; 

NSSortDescriptor *groupDescription = [[NSSortDescriptor alloc] 
            initWithKey:GROUP_NAME ascending:YES]; 
//Sort by Category Name 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] 
            initWithKey:sortField ascending:YES]; 

NSMutableArray *sorts = [[[NSMutableArray alloc] init] autorelease]; 

[sorts addObject:sortDescriptor]; 
[sorts addObject:groupDescription]; 


[fetchRequest setSortDescriptors:sorts]; 
//[fetchRequest setResultType:NSDictionaryResultType]; 
//[fetchRequest setPropertiesToGroupBy:[entity.propertiesByName valueForKey:CONTRACTOR_NAME]; 


if (predicate != nil) 
    [fetchRequest setPredicate:predicate]; 


//NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 

//NSFetchResultsController 

[fetchRequest setFetchBatchSize:20]; 

NSFetchedResultsController *fetchedResultsController = 
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
            managedObjectContext:context sectionNameKeyPath:GROUP_NAME 
               cacheName:nil]; //Don't use a cache 
[fetchRequest release]; 
[sortDescriptor release]; 
[groupDescription release]; 
return fetchedResultsController; //You can't autorelease this thing... the requestor must do that. 

}

+0

あなたを助けるのが大好きです。しかし、フィルタリングするエンティティに関する詳細が必要です。エンティティは何を呼んだのですか、それはどのフィールドにありますか?それはどれですか? –

答えて

0

それは(たとえば、「子」)は、あなたが、その後NSPredicate「子どもとフェッチできるように、自分自身に戻って、オプション対1の関係を設定する方が簡単かもしれませんが== nil "を使用すると、[array enumerateObjectsUsingBlock:]または同等のものを使用して純粋な目的のCで十分に簡単にフィルタを後でフィルタリングし、条件ごとに一意のオブジェクトを結果の配列に追加することができます。

関連する問題