Josh
Josh

Reputation: 12566

Core Data - Technique For Saving Relationships?

My data model has the following relationship:

[Account] -|------o< [Transaction]

Which is implemented as:

// in Account.h
@property (nonatomic, retain) NSSet *transactions;

// in Transaction.h
@property (nonatomic, retain) Account *account;

Now, I've successfully created an Account and inserted it into Core Data. My question is, how do I add a starting balance to the account? It's obviously just a Transaction on the Account, but is the following sufficient to make the connection both ways (ie connect newAccount.transactions as well as newTransaction.account) in the Data Model?

// we need to insert a new account
Account *newAccount = [NSEntityDescription insertNewObjectForEntityForName:[Account entityName] inManagedObjectContext:self.managedObjectContext];

// . . . configure newAccount

NSNumber *startingBalance = @([self.startingBalanceTextField.text floatValue]);

NSError *error;

// save the new account
[self.managedObjectContext save:&error];

if( !error )
{
    Transaction *newTransaction = [NSEntityDescription insertNewObjectForEntityForName:[Transaction entityName] inManagedObjectContext:self.managedObjectContext];

    // . . . configure newTransaction

    // is this sufficient & proper? Will this add newTransaction to newAccount.transactions as well?
    newTransaction.account = newAccount;

    // save the starting balance
    [self.managedObjectContext save:&error];
}

Upvotes: 0

Views: 75

Answers (1)

Martin R
Martin R

Reputation: 539685

Yes, if transactions and account are defined as inverse relationships, then

newTransaction.account = newAccount;

automatically adds newTransaction to newAccount.transactions.

You can easily verify that in the debugger with po newAccount.

Upvotes: 2

Related Questions