Wenn ich Sie richtig verstehe, möchten Sie Transaktion mit Konto über zwei Beziehungen verwandt werden: debitAccount
und creditAccount
, ja? Und Sie fragen sich, ob Sie inverse Beziehungen erstellen.
Kurz gesagt, eine Beziehung kann nur die Umkehrung einer anderen Beziehung sein. So können Sie beispielsweise keine Beziehung namens transactions
erstellen, die das Gegenteil von debitAccount
und creditAccount
ist. Stattdessen werden Sie zwei Beziehungen schaffen müssen, wie debitTransactions
und creditTransactions
(Ich bin sicher, dass Sie für diese von geeigneteren Namen denken werden ...)
Jetzt, da Beziehungen als Sätze modelliert werden (genauer gesagt, NSSet
s), können Sie die creditTransactions
und debitTransactions
Beziehungen für ein bestimmtes Konto verbinden, um alle Transaktionen zu erhalten, mit denen das Konto involviert ist.
eine (möglicherweise besser) Alternative wäre es, eine Zwischeneinheit einzuführen, mit einem Namen wie TransactionAccount
, das eine zu-Eins-Beziehung zu sowohl Account
und Transaction
sowie ein Attribute hat, wie accountRole
, die das Konto als das identifiziert, Debit- oder Kreditkonto in Bezug auf diese bestimmte Transaktion. Sie würden inverse zu-viele-Beziehungen auf beiden Transaction
und Account
mit einem Namen wie transactionAccounts
erstellen. Auf diese Weise könnten Sie beispielsweise Folgendes schreiben:
[account valueForKeyPath:@"transactionAccounts.transaction"]
, um alle Transaktionen für ein bestimmtes Konto abzurufen. Sie könnten eine NSPredicate
verwenden, um den Satz nur auf Transaktionen zu filtern, bei denen das Konto das Soll/Haben-Konto war.
Seien Sie vorsichtig. Der Grund für umgekehrte Beziehungen ist, dass sie dazu beitragen, die Konsistenz des Modells sicherzustellen. Wenn Sie ein Objekt löschen, das Ziel einer Beziehung ist und keine Inverse aufweist, müssen Sie sicherstellen, dass es aus dieser Beziehung entfernt wird, da andernfalls ungültige Referenzen entstehen. – Alex
Diese Methode sollte nicht "-getTransactions" heißen, da sie keine Transaktionssammlung als Referenz zurückgibt. Verwenden Sie "-allTransactions" oder etwas Ähnliches. –