我正在一个项目中,一个对象有一个故事提要。但是,就像Facebook或任何其他社交网络一样,这些供稿对象可以引用各种对象类型(事件,状态更新等)。我想弄清楚的是如何将其存储在CoreData中。

目前,我已经设置好了,因此组实体具有许多Story对象。但是,我陷入困境的是故事对象。这是我目前所拥有的:

Story
---------
objectId   (the ID of the object being referenced)
objectType (Event, Status, etc)
createdAt
updatedAt
metaData <-- This is what I'm trying to figure out

事件可能具有诸如“attendeeCount”的数据,而状态更新仅具有“文本”。我一直在考虑的两个选项是:
  • 存储序列化的NSDictionary对象以存储元数据,或
  • 创建子类实体

  • 1听起来像是对我来说更有吸引力的解决方案,但是我想听听有CoreData一周以上经验的人:)我不需要当前搜索实际的供稿项目,只需按日期对它们进行排序并显示它们即可。

    最佳答案

    您可以使用所有Story对象具有的基本参数来创建抽象实体Story。
    比您可以创建其他具体实体(例如事件,具有特定字段的状态更新)并将这些具体实体的“父实体”参数设置为“故事”。这样,具体实体将从抽象的Story实体继承所有字段。

    (您可以在实用程序->数据模型检查器中设置抽象实体和父实体参数)。

    结果,您将为您的实体提供清晰易读的界面。
    您也可以在tableView中获取并显示所有实体,并在获取请求中指定“Story”实体。

    编辑

    是的,您可以设置“小组到故事”的多对多关系。
    例如。

    您可以添加事件和状态实体,如下所示:

        Group *grp = [NSEntityDescription insertNewObjectForEntityForName:@"Group" inManagedObjectContext:self.managedObjectContext];
        grp.goupID = @(12);
    
        Event *event = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
        event.storyID = @(123);
    
        Status *status = [NSEntityDescription insertNewObjectForEntityForName:@"Status" inManagedObjectContext:self.managedObjectContext];
        status.storyID = @(1);
    
        [grp addStoriesObject:event];
        [grp addStoriesObject:status];
    
        NSLog(@"group stories %@", grp.stories);
    

    记录结果:
    2013-07-03 23:14:03.706 crdtTest[85418:c07] group stories Relationship 'stories' on managed object (0x74b1f50) <Group: 0x74b1f50> (entity: Group; id: 0x74b1fa0 <x-coredata:///Group/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA42> ; data: {
        goupID = 12;
        stories =     (
            "0x816e720 <x-coredata:///Status/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA44>",
            "0x816d980 <x-coredata:///Event/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA43>"
        );
    }) with objects {(
        <Status: 0x816e6d0> (entity: Status; id: 0x816e720 <x-coredata:///Status/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA44> ; data: {
        group = "0x74b1fa0 <x-coredata:///Group/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA42>";
        storyID = 1;
    }),
        <Event: 0x816d930> (entity: Event; id: 0x816d980 <x-coredata:///Event/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA43> ; data: {
        eventDate = nil;
        group = "0x74b1fa0 <x-coredata:///Group/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA42>";
        storyID = 123;
    })
    )}
    

    关于iphone - 使用CoreData创建新闻提要,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17455774/

    10-09 01:03