Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在故事核心数据iOS 8中添加多个图像_Ios_Objective C_Core Data_Xcode6.1 - Fatal编程技术网

在故事核心数据iOS 8中添加多个图像

在故事核心数据iOS 8中添加多个图像,ios,objective-c,core-data,xcode6.1,Ios,Objective C,Core Data,Xcode6.1,我正在开发这个核心数据应用程序。这是一个故事应用程序。用户可以创建故事。现在每个故事可以有多张图片。现在核心数据模型是这样的: 故事实体:与故事页面具有一对多关系,故事页面实体:与PictureBank具有一对一关系,PictureBank实体:包含用于存储图片的NSData* 现在,当我在我的故事中添加不同的图片并保存时,效果很好。但是,当我多次添加一张图片时,只保存最后添加的图片 例如,如果我在图片库中有pic1、pic2、pic3。我按以下顺序创建了一个故事:pic1、pic2、pic1、

我正在开发这个核心数据应用程序。这是一个故事应用程序。用户可以创建故事。现在每个故事可以有多张图片。现在核心数据模型是这样的:

故事实体:与故事页面具有一对多关系,故事页面实体:与PictureBank具有一对一关系,PictureBank实体:包含用于存储图片的NSData*

现在,当我在我的故事中添加不同的图片并保存时,效果很好。但是,当我多次添加一张图片时,只保存最后添加的图片

例如,如果我在图片库中有pic1、pic2、pic3。我按以下顺序创建了一个故事:pic1、pic2、pic1、pic1或pic1、pic1、pic1并保存我的故事,然后在保存的故事中只有最后存储的pic1可用,其余的都消失了。其中length属性返回0

以下是我正在使用的代码:

- (BOOL)createAndSaveStory:(NSMutableArray *)storyPages andTitle:(NSString *)title withBGColor:(NSString *)bgColor andTheme:(NSString *)themeName isEdited:(BOOL)edited withEditedStoryObject:(Story *)storyObj
{
    Story *newStory = nil;
    if (edited == NO && storyObj == nil)
        newStory = [NSEntityDescription insertNewObjectForEntityForName:@"Story" inManagedObjectContext:_context];
    else
        newStory = storyObj;
    newStory.title = title;
    newStory.bgcolor = bgColor;
    newStory.themeName = themeName;
    newStory.noofpages = [NSNumber numberWithLong:storyPages.count];
    NSMutableArray *pages = [[NSMutableArray alloc] initWithCapacity:5];
    for (int i = 0; i < storyPages.count; i++)
    {
        SSStoryPage *storyPage = [storyPages objectAtIndex:i];
        if (storyPage)
        {
            StoryPage *page = [NSEntityDescription insertNewObjectForEntityForName:@"StoryPage" inManagedObjectContext:_context];
            NSLog(@"Picture Size: %lu", (unsigned long)storyPage.storyPagePictureBank.picture.length);
            page.storyPicture = storyPage.storyPagePictureBank;
            NSLog(@"Picture Size: %lu", (unsigned long)page.storyPicture.picture.length);
            page.storyRecording = storyPage.storyPageRecording;
            page.storyText = storyPage.storyPageText;
            [pages addObject:page];
            page = [pages objectAtIndex:i];
            NSLog(@"Picture Size: %lu", (unsigned long)page.storyPicture.picture.length);
        }
    }
    for (StoryPage *sp in pages)
    {
        NSLog(@"Picture Size: %lu", (unsigned long)sp.storyPicture.picture.length);
    }
    newStory.pages = [[NSOrderedSet alloc] initWithArray:pages];
    NSError *err = nil;
    [_context save:&err];
    if (!err)
        return YES;
    else
        return NO;
}
但之后,当我再次记录它们时,我立即得到:

2015-05-25 16:02:46.943 MySocialStory[4110:795855] Picture Size: 0
2015-05-25 16:02:47.842 MySocialStory[4110:795855] Picture Size: 0
2015-05-25 16:02:48.670 MySocialStory[4110:795855] Picture Size: 3336172

前两项为零,不见了。后来,当我查看保存的故事时,ImageView是空的,最后一张图片是图片。我不明白发生了什么事。调试时我注意到的另一件事是,当我检索PictureBank对象时,所有三个对象都指向相同的内存引用。有什么需要帮忙的吗…?

我把它修好了。问题在于图片库和故事页面之间的关系。最初我把它设置为一对一,因为我认为一个故事页面显然只有一张图片。但是,由于在核心数据中,我们也处理反向关系,因此反向关系不是一对一,也就是说,一张图片可以位于多个故事页面中。因此,我将关系更改为一对多,并且由于一对多关系在Xcode中会发出警告,说设置一对多关系是一个高级设置,我将其切换为多对多,但我使用它就像使用一对多关系一样,忽略PictureBank NSManagedObject类中的SensorDeredSet属性。现在它可以正常工作了:

我在您的代码中没有看到您使用PictureBank实体。您还应该使用这些实体在核心数据中保存图片。
2015-05-25 16:02:46.943 MySocialStory[4110:795855] Picture Size: 0
2015-05-25 16:02:47.842 MySocialStory[4110:795855] Picture Size: 0
2015-05-25 16:02:48.670 MySocialStory[4110:795855] Picture Size: 3336172