I have 2 tables like so in SQLlite:
Users
user_id (pk)
email
inGroups (many to many relationship with groups)
Groups
group_id (pk)
group_name
isActive
whoseUsers (many to many relationship with users)
I have my core data code as so:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Users"];
request.predicate = [NSPredicate predicateWithFormat:@"user_id = %@ AND ANY inGroups.group_id = %@", user, group];
NSArray *results = [context executeFetchRequest:request error:&error];
if ([results count] > 0)
{
for (id u in results)
{
[u setIsActive:[NSNumber numberWithInt:1]];
}
if (![context save:&error2])
{
NSLog(@"Error couldn't save: %@", [error2 localizedDescription]);
}
}
How do I set the isActive flag in Groups when I get a User back?
Users.h
@class Groups;
@interface Users : NSManagedObject
@property (nonatomic, retain) NSNumber * user_id;
@property (nonatomic, retain) NSString * email;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * username;
@property (nonatomic, retain) NSSet *inGroups;
@end
@interface Users (CoreDataGeneratedAccessors)
- (void)addInGroupsObject:(Groups *)value;
- (void)removeInGroupsObject:(Groups *)value;
- (void)addInGroups:(NSSet *)values;
- (void)removeInGroups:(NSSet *)values;
Groups.h
@class Users;
@interface Groups : NSManagedObject
@property (nonatomic, retain) NSNumber * group_id;
@property (nonatomic, retain) NSNumber * isActive;
@property (nonatomic, retain) NSString * group_name;
@property (nonatomic, retain) NSSet *whoseUsers;
@end
@interface Groups (CoreDataGeneratedAccessors)
- (void)addWhoseUsersObject:(Users *)value;
- (void)removeWhoseUsersObject:(Users *)value;
- (void)addWhoseUsers:(NSSet *)values;
- (void)removeWhoseUsers:(NSSet *)values;
@end
@end
You can access mutual relations with their properties, similar to this: (I haven't checked it, so the sintaxis might not be correct, but the idea is the same).
if ([results count] > 0)
{
for (Users *user in results)
{
for (Groups *group in user.inGroups)
group.isActive = [NSNumber numberWithBool:YES];
}
if (![context save:&error2])
{
NSLog(@"Error couldn't save: %@", [error2 localizedDescription]);
}
}