【问题标题】:Adding multiple images in a story Core Data iOS 8在故事中添加多个图像 Core Data iOS 8
【发布时间】:2015-05-25 11:22:12
【问题描述】:

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

Story Entity:与 Story Page 具有一对多关系,Story Page Entity:与 PictureBank 具有一对一关系,PictureBank Entity:包含用于存储图片的 NSData*

现在,当我在我的故事中添加不同的图片并保存它时,它可以正常工作。但是当我多次添加一张图片时,只会保存最后一张添加的图片。

例如,如果我在图片库中有 pic1、pic2、pic3。我按以下顺序创建一个故事:pic1,pic2,pic1,pic1 OR 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;
}

我接收到数组 storyPages 中的页面。然后在 for 循环中逐个遍历它们,并为每个页面创建一个“StoryPage”实体。现在,我正在创建页面的第一个 for 循环中的所有 NSLog 打印正确的图片大小。像这样:

2015-05-25 16:02:35.617 MySocialStory[4110:795855] Picture Size: 3336172
2015-05-25 16:02:36.687 MySocialStory[4110:795855] Picture Size: 3336172
2015-05-25 16:02:38.070 MySocialStory[4110:795855] Picture Size: 3336172
2015-05-25 16:02:39.650 MySocialStory[4110:795855] Picture Size: 3336172
2015-05-25 16:02:39.949 MySocialStory[4110:795855] Picture Size: 3336172
2015-05-25 16:02:40.973 MySocialStory[4110:795855] Picture Size: 3336172
2015-05-25 16:02:42.524 MySocialStory[4110:795855] Picture Size: 3336172
2015-05-25 16:02:42.920 MySocialStory[4110:795855] Picture Size: 3336172
2015-05-25 16:02:44.203 MySocialStory[4110:795855] Picture Size: 3336172

但在那之后,当我再次记录它们时,我立即得到:

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 是空的,最后一个 Image 有图片。我不明白发生了什么。我在调试时注意到的另一件事是,当我检索 PictureBank 对象时,所有三个对象都指向同一个内存引用。请帮忙...???

【问题讨论】:

  • 我在您的代码中没有看到您使用 PictureBank 实体。您还应该使用这些实体将图片保存在 Core Data 中。

标签: ios objective-c core-data xcode6.1


【解决方案1】:

我让它工作了。问题在于图片库和故事页面之间的关系。最初我将其设置为一对一,因为我认为故事页面显然会有一张图片。但是由于在核心数据中我们也使用反向关系,反之亦然不是一对一的,即一张图片可以在多个故事页面中。所以我将关系更改为一对多,因为一对多关系放弃了 Xcode 中的警告,说“设置一对多关系是一种高级设置”我切换到多对多,但是我像一对多关系一样使用它,忽略了我的 PictureBank NSManagedObject 类中的 NSOrderedSet 属性。现在它的工作正常:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2015-03-09
    • 2012-01-08
    相关资源
    最近更新 更多