使用Core Data更新/删除关系

时间:2010-10-21 03:27:48

标签: iphone objective-c core-data

我在Core Data

中定义了以下关系

人 - >工作< - 工作

我有一个在tableview中显示Person信息的视图。然后,用户可以单击“工作项目”以查看该人员的所有工作项目(工作实体显示工作时间和相关工作)。 然后我推出一个显示该人工作的视图。 我还在选择器视图中显示了可以添加到Worked列表的作业列表。

我试图以这种方式做到这一点,但我不确定我是否采取正确的方式,所以我希望专家对此有所了解。

我应该将哪些内容传递到Worked视图?我目前传入包含Worked NSSet的Person对象来加载表视图。然后我使用NSFetchedResultsController加载选择器。 所以我通过使用Person和Job addWorkedObject:方法使添加功能正常工作。 但我需要让用户从表格视图中删除一个工作项目。

我应该使用两个NSFetchedResults吗?如果是这样,怎么样?

我真的很想结束这个,所以如果有人能提供帮助,我真的很感激。

谢谢,

1 个答案:

答案 0 :(得分:0)

我需要更多信息。首先,如图所示,您的关系是单向的吗?根据我的阅读,Core Data对双向关系更加满意。

例如,这个模型(下面)

  

人< - >>工作<< - >工作

声明Person可以“拥有”许多Worked对象,而Worked对象最多只能与一个Person关联。类似地,Job可以与许多Worked对象相关联,但Worked对象最多只能与一个Job相关联。这是你的模特吗?

如果是这样,我会使用NSFetchedResultsController作为根视图(显示所有人的视图)。但我只想使用NSSets / NSArrays来填充UITableView和UIPickerView。

这是我用于调试的方法 - 但它可能为获取所有作业提供了一个起点。为了您的目的,您可以使用'items'中的NSManagedObjecs填充ivar NSArray。

- (void) dumpAllObjects:(NSString *) entityDescription
{
DLog(@"Dump all object of type '%@']", entityDescription);
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:entityDescription
                         inManagedObjectContext:managedObjectContext]];

NSError *error = nil;
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];

DLog(@" There are %d instances of entity '%@'", [items count], entityDescription);

for (NSManagedObject *managedObject in items)
    {
    if ([managedObject respondsToSelector:@selector(dump)])
        [managedObject dump];
    }
}

同时,我会将UIViewController子类化为显示Worked对象和Job对象的视图 - 并让该类实现UITableViewDelegate,UITableViewDataSource,UIPickerViewDelegate和UIPickerViewDataSource。

至于删除,我不知道哪个方面导致问题。如果你有-addWorkedObject:Person和Job的方法,那么你也应该有-reomveWorkedObject:方法。否?

希望这有帮助。