核心数据,检查现有的多对多关系

时间:2010-12-16 16:40:00

标签: iphone core-data many-to-many

我的第一个核心数据项目出现问题......

我有多个关系中的两个实体:引用<< --->>锅炉。

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

我认为下面的代码失败了,因为Predicate不知道选择了哪个锅炉,但我不能完全理解......

   - (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];   

    } 

任何帮助或指示都将不胜感激......

1 个答案:

答案 0 :(得分: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
            }

        }
    }

无论如何,你有没有试过这样的东西?