次の前提といくつかの小さな問題がある単純なアプリケーションがあります。
- 4 つのタブがあり、それぞれに異なる情報を表示するテーブル ビューと、同じビュー コントローラーにモーダルで移動するプラス ボタンがあり、ユーザーはアプリに情報を追加できます。
- ユーザーはビュー コントローラーに名前、タイトル、日付、金額を追加し、保存を押すとコア データ テーブル ビューに保存されます。
最初のタブには、上記の情報 (名前、タイトル、日付、金額) のすべてがラベル付きのカスタム テーブル セルに表示されます。これはうまく機能します。
2 番目のタブには名前に関する情報のみが表示され、3 番目のタブにはタイトルのみが表示されます。このように、ユーザーは最初のタブにすべてを表示しますが、2 番目のタブには「名前」のみが表示され、その名前に関する情報を収集するために選択できます。
名前 (または日付またはタイトル) ごとにエントリが 1 つしかない場合、アプリは正常に機能しますが、2 つ目のエントリを追加すると、[名前] タブで重複します。
たとえば、John Smith のエントリが 1 つしかない場合、[名前] タブにはそのエントリが 1 つ表示され、そこに入ると、John の名前が付いているトランザクションのみが表示されます (この例では 1 つ)。場合)。すべて良い。
ただし、John の別のエントリ (スペルはまったく同じ) を追加すると、それは別のエントリとして扱われ、突然、[名前] タブに 2 つの John が表示されます。
コア データ モデルの属性に一意の ID を入れていませんが、これを行う必要がありますか、それとも述語を使用して、[名前] タブで「これが既に存在する場合は、2 回表示しないでください」と尋ねることができますか?バー?
どんな支援も大歓迎です!
編集:
Name タブの fetchRequest は次のとおりです。
- (NSFetchedResultsController *)fetchedResultsController
{
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
if (_fetchedResultsController != nil)
{
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:managedObjectContext];
fetchRequest.entity = entity;
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"whoBy.name" ascending:NO];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];
NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
ご覧のとおり、述語などはありません。私が欲しいのは、「名前が存在する場合は、2回追加しないでください」という簡単なチェックを名前テーブルビューに表示することです。これが理にかなっていると思いますか?