1

私はこれに似たコアデータモデルを持っています:

  • 会社エンティティ
    • companyName属性(文字列)
    • To-従業員エンティティとの多くの関係。
  • 従業員エンティティ
    • employeeID属性(文字列)
    • To-親会社エンティティとの1つの関係

会社をテーブルビューで一覧表示するルートビューコントローラーがあります。次に、行を選択すると、選択した会社のインデックスが、テーブルに従業員をリストする別のビューコントローラーにプッシュされます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)ip 
{
    EmployeeListViewController *anotherViewController = [[EmployeeListViewController alloc] init];
    [anotherViewController setCompany:[companyList objectAtIndex:[ip row]]];
    [[self navigationController] pushViewController:anotherViewController animated:YES];
    [anotherViewController release];
}

従業員ビューコントローラでは、会社はNSManagedObjectに設定されています。

- (void)setCompany:(NSManagedObject *)co
{
    [co retain];
    [company release];
    company = co;

    [self setTitle:[company valueForKey:@"companyName"]];
}

新しい従業員を追加するための私のコードは次のようになります。

employee = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:moc];
[[company mutableSetValueForKey:@"employee"] addObject:employee];
[employee setValue:employeeID forKey:@"employeeID"];

これはデータベースを正しく挿入しているように見え、会社の外部キーIDがEmployeeテーブルに挿入されていることがわかります。

会社のすべての従業員を取得しようとしていますが、行き詰まっています。

これが私がNSFetchRequestに対して持っているものですが、それは私にすべての従業員(会社ではない)を与えるだけです:

NSManagedObjectContext *moc = [self managedObjectContext];

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"Employee" inManagedObjectContext:moc]];
[fetch setEntity:entity];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:fetch error:&error];

[fetch release];
4

1 に答える 1

1

これは、エンティティのクラスを生成する場合に簡単に処理できます。XCodeでモデルを編集しているときに、Cmd-Nを押して新しいファイルを作成します。左側でiOSCocoaTouch Classを選択し、右側でManagedObjectClassを選択します。[次へ]、[次へ]、[次へ]をクリックすると、エンティティを表すクラスファイルが生成されます。

これらのクラスは、オブジェクト間のすべての接続を管理するのに役立つため、黄金色です。モデルで、会社から従業員への多対関係を定義し、それを従業員と呼ぶ場合、会社クラスには、その特定の会社に関連付けられているすべての従業員のNSSetであるemployeesプロパティがあります。すごいね。

作成コードは次のようになります。

Employee *employee = (Employee*)[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:moc];
employee.employeeID = employeeID;
[company addEmployeesObject:employee];

次に、会社に関連付けられている従業員のリストを取得するには、次のように簡単です。

for(Employee *employee in company.employees) {
    // Do something with the employee
}
于 2011-02-05T00:30:14.410 に答える