在多对多关系中一次只添加一个NSManagedObject

时间:2013-12-06 00:46:50

标签: ios core-data nsmanagedobject

我在最好的情况下使用核心数据,很少或没有困难。在这个新项目中。我试图将照片添加到单个项目中。现在,项目实体被创建并保存,没有任何问题。当我尝试将多张照片添加到项目中时会出现问题。它只允许我一次添加一个,如果我尝试添加一个新的,它会重写(替换)我添加的前一个。我一直试图找出它并尝试不同的方法(手动将其添加到可变集并设置新集)。下面是我创建项目,照片和将照片添加到项目的代码。

任何帮助都将不胜感激。

在'viewWillAppear'中:

self.project = [NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
\\ set certain attributes

在'imageController:didFinishPickingMediaWIthInfo:'委托方法

NSString *mediaType = info[UIImagePickerControllerMediaType];

    void(^completion)(void) = ^(void) {
        if ([mediaType isEqualToString:(NSString *)kUTTypeImage])
        {
            UIImage *image = info[UIImagePickerControllerOriginalImage];

            [self addPhotoToProject:image];
        }
    };

    [self dismissViewControllerAnimated:YES completion:completion];

最后,我的自定义'addPhotoToProject:'

Photo *temp = [NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext:self.managedObjectContext];
    temp.img = UIImagePNGRepresentation(image);
    temp.date = [NSDate date];
    temp.project = self.project;
    [self.project addPhotosObject:temp];

此时,我重新拉出项目的照片列表并更新collectionView我必须显示它们。此外,项目本身不会保存在这些点,用户必须按保存。

2 个答案:

答案 0 :(得分:0)

在运行时创建新的project

-(NSManagedObject *)project 
{
    if(!_project) {
        _project = [NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
    }
    return _project;
}

答案 1 :(得分:0)

我发现了什么问题,在viewWillDissappear方法中,我有managedObjectContext回滚。由于imagePickerController不断弹出导致项目被删除。感谢@EricQian关于查看viewWillAppear的想法,这让我想到了这个