Uitableview CoreData:一对多关系显示问题

Uitableview CoreData:一对多关系显示问题,uitableview,core-data,one-to-many,nsfetchedresultscontroller,nsfetchrequest,Uitableview,Core Data,One To Many,Nsfetchedresultscontroller,Nsfetchrequest,我意识到这相当长,但我目前正在进行我的第一个CoreData项目,尽管阅读了所有的资源,但我发现它还没有完全深入。到目前为止,我已经把它保存并坚持了下来,但我似乎无法让这种关系正常运作。 我有一个表视图,它显示Exersize类别,移动到一个表中,一对多地显示其关联的Exersize 试图发布一张图片,但我还没有足够的代表点,但数据模型如下所示 ExersizeCategory>Exersize 从我所读到的所有内容来看,我相信我可能需要使用谓词来过滤结果,但我对这实际上是如何工作的以及天气与否

我意识到这相当长,但我目前正在进行我的第一个CoreData项目,尽管阅读了所有的资源,但我发现它还没有完全深入。到目前为止,我已经把它保存并坚持了下来,但我似乎无法让这种关系正常运作。 我有一个表视图,它显示Exersize类别,移动到一个表中,一对多地显示其关联的Exersize

试图发布一张图片,但我还没有足够的代表点,但数据模型如下所示

ExersizeCategory>Exersize

从我所读到的所有内容来看,我相信我可能需要使用谓词来过滤结果,但我对这实际上是如何工作的以及天气与否感到困惑,我实际上甚至在创建和保存exercize类别和exercizes对象,以便首先使关系正常工作

下面是我如何创建和保存并将其名称设置为textfield条目

ExersizeCategory *exersizeCategory = [NSEntityDescription insertNewObjectForEntityForName:@"ExersizeCategory"
                                                                       inManagedObjectContext:self.managedObjectContext];
    exersizeCategory.name = self.textField.text;

    [self.managedObjectContext save:nil];  // write to database
这是基本相同的代码

// Create a new instance of the entity 
    exersize = [NSEntityDescription insertNewObjectForEntityForName:@"Exersize"
                                             inManagedObjectContext:self.managedObjectContext];

    exersize.name = self.textField.text;

    [self.managedObjectContext save:nil];  // write to database
虽然这似乎在创建对象时起作用,并且我在TableView上看到了它们,但我还没有实现CoreDataGeneratedAccessor,它们如何以及在何处适合图片

@interface ExersizeCategory (CoreDataGeneratedAccessors)
voidAddExerSizeObject:Exersize*值; voidRemoveExerSizeObject:Exersize*值; voidaddExersizes:NSSet*值; voidremoveExersizes:NSSet*值; 我应该提到的是,我正在使用CoreDataTableViewController类,它似乎减少了您需要为Fetch编写的代码量,这是我在斯坦福大学创建的www.timroadly.com上通过教程找到的。旁注:最好不要将其子类化,而只是使用我在中注意到的标准方式。h它声明其版权归斯坦福大学所有,因此我不确定是否可以在我想要发布的应用程序中使用它

下面是我当前如何获取以显示大小

- (void)setupFetchedResultsController {
// 1 - Decide what Entity you want
NSString *entityName = @"Exersize"; // Put your entity name here
NSLog(@"Setting up a Fetched Results Controller for the Entity named %@", entityName);

// 2 - Request that Entity
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];

// 3 - Filter it if you want

//currently unsure about this!
//request.predicate = [NSPredicate predicateWithFormat:@""];

// 4 - Sort it if you want
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name"
                                                                                 ascending:YES
                                                                                  selector:@selector(localizedCaseInsensitiveCompare:)]];
// 5 - Fetch it
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                    managedObjectContext:self.managedObjectContext
                                                                      sectionNameKeyPath:nil
                                                                               cacheName:nil];
[self performFetch];
}

我知道我已经错过了实现这一点的关键部分,但我只是不确定是哪一个和在哪里。 我在core data只呆了几天,所以要了解它是非常重要的

感谢所有能让我明白/回答/甚至把我推向正确方向的人

f.毁灭

你写道:

虽然这似乎在创建对象时起作用,我看到 我还没有将它们放在桌面视图上实现 CoreDataGeneratedAccessor,如何以及在何处将其安装到 照片

核心数据动态地创建这些方法的实现。标题是为了方便您和编译器类型检查

下面是一个简单的谓词,用于在exercesize实体上查找练习名称:

安德鲁


另外,您可能需要更正单词练习的拼写。

您好,安德鲁,请注意拼写,不过为了保持一致性,我暂时保持不变。在尝试了更多的东西和更多的阅读之后,我相信我已经正确地获取了它。但是,当我创建exersize对象时,我似乎无法将它放入关系中,因为exersizes的NSSet计数保持为0。我尝试过[exercisecategory addexersizeobject:exercisesize];但这似乎不起作用?我已经尝试了所有我能找到的解决方案,但我仍然在某个地方出了问题,你觉得有什么明显的问题吗?谢谢你。毁灭,每个CD的关系都有一个相反的方向。因此,如果关系是一对多的关系,并且逆关系是一对一的关系,那么可以通过简单的赋值来建立关系。例如:exercise.exercises=exercises;。安德烈·旺德鲁,我似乎无法让它发挥作用,和以前一样的问题。正在创建、提取和显示练习类别对象,但练习本身不会。通过print语句,我可以看到托管对象上下文正在被传递,一些内容正在被创建,但是NSSet仍然是空的,tableview也是空的。我猜这是因为它正在获取相关的条目,并且由于没有任何内容被添加到其中,所以它没有获取任何内容。你知道会发生什么吗?我可以更新我的帖子来显示更多的代码,如果这对情况有帮助的话?干杯,伙计!嗨,你找到赦免了吗,我有完全相同的问题?。。。。非常感谢您提前回复。
NSPredicate *p = [NSPredicate predicateWithFormat: @"%K == %@", @"name", @"Push Up"];