我在核心数据实体上设置了 1对多关系。我试图显示相关数据的详细视图副本。目前我有prepareforseague:与原始实体(Routines)合作的方法,但是我对如何显示链接实体(RoutinesDetails)感到很遗憾。
FBCDRoutineViewController
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Fetch the devices from persistent data store
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Routines"];
self.routines = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
[self.tableView reloadData];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"UpdateDevice"]) {
NSManagedObject *selectedDevice = [self.routines objectAtIndex:[[self.tableView indexPathForSelectedRow] row]];
FBCDRoutineViewController *destViewController = segue.destinationViewController;
destViewController.routines = selectedDevice;
}
FBCDRoutineDetailViewController
- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Fetch the devices from persistent data store
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"RoutinesDetails"];
self.routines = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
}
- (void)viewDidLoad
{
[[self navigationController] setNavigationBarHidden:NO animated:YES];
[super viewDidLoad];
// Do any additional setup after loading the view.
if (self.routines) {
[self.testLabel setText:[self.routines valueForKey:@"routinename"]];
}
}
FBCDRoutineDetailViewController
@property (strong) NSManagedObject *routines;
这是我第一次使用核心数据,我正在研究如何显示Details实体。我接近它的工作吗?如果没有,我可以直接指向我应该看的东西。
有什么建议吗?
答案 0 :(得分:0)
我想我看到了几个问题 - 主要与这些不同电话的时间有关。
我相信在调用prepareForSegue之前会在您的详细信息视图中调用viewDidLoad。因此,viewDidLoad中的代码在设置之前会尝试显示有关详细信息项的数据。
然后viewDidAppear中的代码看起来要覆盖你在prepareForSegue中设置的值,这对我来说没有意义(虽然此时视图已经显示,并且它不会影响你试图设置的标签viewDidLoad中)。
此外,executeFetchRequest:返回NSArray,而不是NSManagedObject,因此将获取结果分配给NSArray属性是一个不好的想法。
答案 1 :(得分:0)
如果我正确理解您的问题,您希望显示所有 RoutinesDetails 对象
与prepareForSegue
中传递的 Routines 对象相关。
然后你会在FBCDRoutineDetailViewController
中声明两个属性:
@property (strong) NSManagedObject *routines; // the passed object
@property (strong) NSManagedObject *routineDetails; // the displayed details objects
并像这样获取它们:
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"RoutinesDetails"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"routineinfo == %@", self.routines];
[fetchRequest setPredicate:predicate];
NSError *error;
self.routineDetails = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
self.routineDetails
现在是详细信息视图的数据源数组。
(备注:为了在表格视图中显示核心数据请求的结果集,
您也可以考虑使用NSFetchedResultsController
。)