コアデータが残っています。私は1:Mの関係を構築しました。会社と従業員を挙げましょう。コアデータ1:Mの関係のレコードを表示
私はその後、私は従業員を作成し、会社を作成します。
Employees *employee = (Employees *)[NSEntityDescription insertNewObjectForEntityForName:@"Employees" inManagedObjectContext:myObjectContext];
employee.name = employeeName;
employee.company = company;
NSError *error = nil;
if (![myObjectContext save:&error])
{
// Handle the error.
NSLog(@"error: %@", error.description);
}
私は、SQLファイルを分析した場合、私は従業員レコードの親列が正しく会社識別子が移入されていることがわかります。 今私は自分のテーブルビューで会社を選択し、その従業員を別のテーブルビューで表示したいと思います。次のように私はNSFetchedResultsController
を実装:
- (NSFetchedResultsController *)fetchedResultsController
{
if (fetchedResultsController != nil)
{
return fetchedResultsController;
}
//retrieve context
if (myObjectContext == nil)
{
id appDelegate = (id)[[UIApplication sharedApplication] delegate];
self.myObjectContext = [appDelegate managedObjectContext];
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Employees" inManagedObjectContext:myObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *myFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:myObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
self.fetchedResultsController = myFetchedResultsController;
fetchedResultsController.delegate = self;
return fetchedResultsController;
}
を、私はviewDidAppearでそれを呼び出す:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSError *error = nil;
//call the fetch
if (![[self fetchedResultsController] performFetch:&error])
{
NSLog(@"Error with fetchedResultsController: %@, %@", error, [error userInfo]);
exit(-1);
}
[self.tableView reloadData];
}
問題は、すべての従業員は、とだけでなく、選択した会社のものは、表示されていることです。
アイデア?
私はObjectContextとCompanyオブジェクトをEmployees View Controllerに渡しましたが、どの会社が以前にFetchedResultsControllerに選択され、関連する従業員だけを表示するかを知ることはできません。何か提案してください? 私はこのように見つけました: NSArray * a = [company.employees allObjects]; //従業員は関係です ' これは正しい方法ですか?これは、従業員のビューコントローラでコアデータNSFetchedResultsControllerを使用できないが、すべての従業員にのみ配列を使用できることを意味しますか? – yassassin
はい、この方法で使うことができます。これが最も単純な方法です。これは、私が関係を使って意味したものです。別のNSFetchedResultsコントローラが必要な場合は、選択した会社の従業員だけを取得するNSPredicateで設定する必要があります。 –
私は理解しました、ありがとう... しかし、この時点で、約1:1の関係は何ですか?たとえば、EmployeesとEmployeeDetailsの場合、1つのEmployeeにはEmployeeDetailとviceversaが1つしかありません。 選択した従業員のEmployeeDetailsビューコントローラでEmployeeDetailに関する情報を取得するにはどうすればよいですか? – yassassin