在模拟器中查看核心数据的内容

时间:2012-04-29 09:43:19

标签: ios xcode core-data

我有一对多的CoreData模型。有任务列表和任务属于任务列表。我的问题是每当我创建一个新任务时,也会创建一个任务列表。

“new tasklist”是db中name字段的默认值。 “新任务列表”是View在创建新任务时存储的值。可以看出,每次创建任务时,都会自动创建具有默认名称值的任务列表。

问题 这是它应该如何看?如果是这样,我如何进行查询只选择Z_ENT = 1的任务列表名称(那些是父母,对吗?) 如果这看起来非常错误,我该如何正确插入内容。我认为我的表关系是正确的 - 但如果这可能是问题,我会发布截图。

模型图 enter image description here

我的代码

选择列表时:

    NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
    TaskViewController *taskViewController = [[TaskViewController alloc] init];
    taskViewController.managedObjectContext = [self.fetchedResultsController managedObjectContext];
    taskViewController.tasklist = managedObject;

在TaskViewController中,我得到了如下的fetchedResultsController:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:
                              @"(tasklistOfTask == %@)", tasklist];
    [fetchRequest setPredicate: predicate];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;

然后插入,

   NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
    NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];

    [newManagedObject setValue:@"dummy" forKey:@"task"]; 
    [newManagedObject setValue:tasklist forKey:@"tasklistOfTask"];

从AppDelegate传入managedobjectcontext。

1 个答案:

答案 0 :(得分:1)

您已在Tasks和Tasklists之间创建了继承关系,因此每个任务也是一个任务列表,并且这两个实体都存储在同一个表中。我建议删除它并更改模型,使其看起来像

this

如果您还没有从模型中生成托管对象类,那么您的代码将类似于:

   NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
    TaskViewController *taskViewController = [[TaskViewController alloc] init];
    taskViewController.managedObjectContext = [self.fetchedResultsController managedObjectContext];
    taskViewController.tasklist = managedObject;

    NSPredicate *predicate = [NSPredicate predicateWithFormat:
                              @"(tasklist == %@)", tasklist];
    [fetchRequest setPredicate: predicate];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;

   NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
    Task *newTask = (Task *)[NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
    newTask.taskName = @"dummy";
    newTask.number = [NSNumber numberWithInteger:[tasklist.tasks count] + 1];
    newTask.tasklist = tasklist;