2010-12-16 42 views
1

有我的第一核心数据项目的麻烦......核心数据,检查现有的许多一对多的关系

我有一个多两个实体一对多的关系:行情< < --- >>锅炉。

当用户在UITableView行中选择锅炉时,我想知道该锅炉是否与该页面正在管理的报价有关系,并切换该关系。

我认为下面的代码失败,因为谓词不知道锅炉已被选中,但我不能完全得到这个权利...

- (void)managedObjectSelected:(NSManagedObject *)managedObject 
    { 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:[NSEntityDescription entityForName:@"Boiler"  inManagedObjectContext:managedObject.managedObjectContext]];  

    request.predicate = [NSPredicate predicateWithFormat:@"ANY myQuote = %@", quote]; 
    NSError *error; 
    NSUInteger count = [managedObject.managedObjectContext countForFetchRequest:request error:&error]; 

    if(count==0){ 
     [quote addMyBoilersObject:(Boiler*) managedObject]; 
    } 
    else { 
     [quote removeMyBoilersObject:(Boiler*) managedObject]; 
    } 

    [managedObject.managedObjectContext save:&error]; 

    } 

任何帮助或指针会非常感谢...

回答

0

解决此问题的一种方法是使用NSFetchedResultsController来填充您的UITableView。如果你这样做,那么你应该可以切换选择

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    { 
    // Get the Boiler that was selected. 
    Boiler *boiler = (Experiment *) [fetchedResultsController objectAtIndexPath:indexPath]; 
    if (boiler) 
     { 
     if ([[self quote] boilers] containsObject:boiler]) 
      { 
      // connected, so disconnect 
      } 
     else 
      { 
      // disconnected, so connect 
      } 

     } 
    } 

无论如何,你有没有尝试过这样的事情?

+0

这似乎是正确的方法,但是您能否指出我在示例中对“包含”命令的引用,编译器不喜欢它,并且我正在努力寻找教程。谢谢。 – MattSW 2011-01-10 14:41:41

+0

这是我的错误 - 请参阅编辑修正。 [[self quote]锅炉]返回一个NSSet。 -containsObject:是NSSet的实例方法。希望这可以帮助。 – westsider 2011-01-10 17:39:14