使用核心数据和获取请求来更新一段数据

时间:2014-04-15 06:43:20

标签: ios objective-c core-data ios7 nsfetchrequest

我在SQLite中有两个这样的表:

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) 

我的核心数据代码如下:

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]);
    }
}

当我收到用户后,如何在群组中设置isActive标志?

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

1 个答案:

答案 0 :(得分:1)

您可以访问与其属性的相互关系,类似于: (我没有检查过,所以sintaxis可能不正确,但想法是一样的。)

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]);
    }
}