我正在尝试编写我的第一个Cocoa应用程序,而核心数据使我的数据对象建模变得困难。我有两个要操作的实体:Account和Transaction。Account有一个人类可读的名字,仅此而已。Transaction存储货币值,以及对名为debitAccount和creditAccount的两个帐户的引用(我正在开发一个双账簿会计应用程序)。
我希望能够找到给定Account的所有Transactions,无论他们使用的是debitAccount还是creditAccount。我该怎么做呢?有没有一种方法可以轻松地与Cocoa UI绑定一起工作?
发布于 2009-03-13 16:36:56
对我来说,最有效(也最有意义)的解决方案是创建NSManagedObject的一个子类作为我的Account实体:
@interface Account : NSManagedObject {
}
-(NSArray*)getTransactions;
@end我在-getTransactions中有实际的查找逻辑,这并不是很难手工完成。到目前为止,这工作得很好,特别是因为方法名符合KVO。
要使核心数据返回类而不是类,我必须在Xcode的数据建模工具中更改实体的“Account”属性。
发布于 2009-03-10 20:45:45
如果我理解正确的话,您希望事务通过两个关系与帐户相关:debitAccount和creditAccount,对吗?你想知道如何创建反向关系。
简而言之,一个关系只能是另一个关系的逆关系。因此,您将无法创建一个称为transactions的关系,它是debitAccount和creditAccount的反向关系。相反,您必须创建两个关系,如debitTransactions和creditTransactions (我相信您会为它们想出更合适的名称……)
现在,由于关系被建模为集合(具体地说,是NSSet),因此您可以联合特定帐户的creditTransactions和debitTransactions关系,以获得该帐户涉及的所有事务。
一种(可能更好的)替代方案是引入一个中间实体,其名称类似于TransactionAccount,它与Account和Transaction都具有一对一的关系,以及一个属性,比如accountRole,它将帐户标识为与该特定事务相关的借方或贷方帐户。您将在Transaction和Account上创建名为transactionAccounts的反向对多关系。这样,你就可以写成这样的代码:
[account valueForKeyPath:@"transactionAccounts.transaction"]获取特定帐户的所有交易。您可以使用NSPredicate将该集合过滤为仅帐户为借方/贷方帐户的交易。
https://stackoverflow.com/questions/631924
复制相似问题