Iphone 使用CoreData创建新闻提要

Iphone 使用CoreData创建新闻提要,iphone,ios,core-data,ios6,Iphone,Ios,Core Data,Ios6,我正在做一个项目,其中一个对象有一个故事提要。然而,就像Facebook或任何其他社交网络一样,这些提要对象可以引用各种对象类型(事件、状态更新等)。我想弄清楚的是如何将其存储在CoreData中 目前,我已将其设置为使组实体具有许多故事对象。然而,我陷入困境的是故事对象。以下是我目前拥有的: Story --------- objectId (the ID of the object being referenced) objectType (Event, Status, etc) cre

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

目前,我已将其设置为使组实体具有许多故事对象。然而,我陷入困境的是故事对象。以下是我目前拥有的:

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
故事
---------
objectId(被引用对象的ID)
对象类型(事件、状态等)
创建数据
更新的

元数据您可以使用所有故事对象都具有的基本参数创建抽象实体故事。 然后,您可以创建其他具体实体,如事件、状态更新和特定字段,并将这些具体实体的父实体参数设置为故事。通过这种方式,具体实体从抽象故事实体继承所有字段

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

因此,您的实体将具有清晰可读的接口。 您还可以在tableView中获取并显示所有实体,并在获取请求中指定“故事”实体

编辑

是的,您可以设置组与故事之间的多个关系。 例如

您可以像这样添加事件和状态实体:

    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;
})
)}
2013-07-03 23:14:03.706 crdtTest[85418:c07]管理对象(0x74b1f50)上的组故事关系“故事”(实体:组;id:0x74b1fa0;数据:{
goupID=12;
故事=(
“0x816e720”,
“0x816d980”
);
})有物体{(
(实体:状态;id:0x816e720;数据:{
group=“0x74b1fa0”;
storyID=1;
}),
(实体:事件;id:0x816d980;数据:{
事件日期=零;
group=“0x74b1fa0”;
storyID=123;
})
)}

您可以使用所有故事对象都具有的基本参数创建抽象实体故事。 然后,您可以创建其他具体实体,如事件、状态更新和特定字段,并将这些具体实体的父实体参数设置为故事。通过这种方式,具体实体从抽象故事实体继承所有字段

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

因此,您的实体将具有清晰可读的接口。 您还可以在tableView中获取并显示所有实体,并在获取请求中指定“故事”实体

编辑

是的,您可以设置组与故事之间的多个关系。 例如

您可以像这样添加事件和状态实体:

    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;
})
)}
2013-07-03 23:14:03.706 crdtTest[85418:c07]管理对象(0x74b1f50)上的组故事关系“故事”(实体:组;id:0x74b1fa0;数据:{
goupID=12;
故事=(
“0x816e720”,
“0x816d980”
);
})有物体{(
(实体:状态;id:0x816e720;数据:{
group=“0x74b1fa0”;
storyID=1;
}),
(实体:事件;id:0x816d980;数据:{
事件日期=零;
group=“0x74b1fa0”;
storyID=123;
})
)}

您是如何获得此提要的?您是如何获得此提要的?嗯,这是一种有趣的方法。考虑到技术上一个团队有很多状态更新和很多事件,这种方法有什么缺点吗?或者我还是可以建立这种关系?好的,这听起来是个完美的解决方案。仍然想知道这种方法是否有缺点。现在就开始吧,谢谢!!非常感谢。这是一个很棒的答案。嗯,这是一个有趣的方法。考虑到技术上一个团队有很多状态更新和很多事件,这种方法有什么缺点吗?或者我还是可以建立这种关系?好的,这听起来是个完美的解决方案。仍然想知道这种方法是否有缺点。现在就开始吧,谢谢!!非常感谢。这是一个令人敬畏的答案。