Вопрос

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]);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top