【发布时间】:2015-03-19 19:28:12
【问题描述】:
我正在使用 Magical Record 来管理我的核心数据堆栈。在我的整个应用程序中,我一直在使用 saveWithBlock 方法进行保存,并且一切正常。 但是,在一次特定的保存中,不会保存更改。我正在尝试向现有照片对象添加一个新组。
我尝试在保存之前和完成块之后打印 photos.groups.count,计数确实增加了。但是当我用相同的照片再次运行此代码时,photos.groups.count 又回到 1,这意味着没有添加新组。
//check if this asset has been processed before
__block PTPhoto *photo = [PTPhoto fetchWithAsset:asset];
if (photo && ![[photo groups] containsObject:group]) {
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
PTGroup *localGroup = [group MR_inContext:localContext];
photo = [photo MR_inContext:localContext];
[photo addGroup:localGroup];
[photo addGroupsObject:localGroup];
} completion:^(BOOL success, NSError *error) {
[[PTNetwork defaultNetwork] updatePhoto:photo WithAddedGroup:group WithCompletion:^{
dispatch_group_leave(ProcessImageGroup());
}];
}];
}
我编写了自己的 addGroup 方法来将项目添加到 NSSet
-(void)addGroup:(PTGroup *)group {
NSMutableSet *mutableGroups = [self mutableSetValueForKey:@"groups"];
[mutableGroups addObject:group];
}
我也尝试过使用核心数据生成方法,但没有成功
@interface PTPhoto (CoreDataGeneratedAccessors)
- (void)addGroupsObject:(PTGroup *)value;
这就是我获取现有照片的方式:
+ (PTPhoto *)fetchWithAsset:(PHAsset *)asset {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *assetPredicate = [NSPredicate predicateWithFormat:@"localID == %@", [asset localIdentifier]];
[request setPredicate:assetPredicate];
[request setEntity:[PTPhoto entityWithContext:[NSManagedObjectContext MR_defaultContext]]];
NSError *error;
NSArray *array = [[NSManagedObjectContext MR_defaultContext] executeFetchRequest:request error:&error];
if ([array count]) {
return array[0];
} else {
return nil;
}
}
谢谢!!
【问题讨论】:
标签: ios core-data nsfetchedresultscontroller magicalrecord