【发布时间】:2012-03-30 16:25:51
【问题描述】:
我意识到这很长,但我目前正在处理我的第一个 CoreData 项目,尽管阅读了所有资源,但我发现它还没有全部深入。到目前为止,我已经保存并坚持一切都很好,但是我似乎无法让这种关系正常工作。 我有一个显示 Exersize 类别的表格视图,该视图移动到显示其关联的 Exersize(一对多)的表格。
(尝试发布图像,但我还没有足够的代表点)但是 dataModel 看起来像这样
ExersizeCategory>Exersize
从我读过的所有内容中,我相信我可能需要使用谓词来过滤结果,但我对这实际上是如何工作的以及天气情况感到困惑,我什至实际上是在创建和保存 Exersize类别和 Exersizes 对象适当地使关系首先起作用。
这是我创建和保存的方式(还将其名称设置为文本字段条目)
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
虽然这似乎在创建对象时有效,而且我在 tableviews 上看到了它们,但我还没有实现 coreDataGeneratedAccessors,但它们如何以及在哪里适合图片?
@interface ExersizeCategory (CoreDataGeneratedAccessors)
- (void)addExersizesObject:(Exersize *)value;
- (void)removeExersizesObject:(Exersize *)value;
- (void)addExersizes:(NSSet *)values;
- (void)removeExersizes:(NSSet *)values;
我应该提到我正在使用由斯坦福大学创建的 CoreDataTableViewController 类,它似乎减少了您需要编写的 fetch 代码量(我通过我在 www.timroadly.com 上的教程发现) .旁注:最好不要将其子类化并仅使用我在 .h 中注意到的标准方式,它声明其版权归斯坦福所有,因此我不确定是否可以在要发布的应用程序中使用它?
这是我当前获取以显示 Exersizes 的方式
- (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];
}
我知道我错过了实现这一点的关键部分,但我只是不确定是哪一个以及在哪里。 我只在核心数据上呆了几天,所以学习起来非常艰巨!
感谢任何可以阐明/回答/甚至将我推向正确方向的人!
【问题讨论】:
标签: uitableview core-data one-to-many nsfetchedresultscontroller nsfetchrequest