【问题标题】:Core Data, check for existing Many-To-Many relationship核心数据,检查现有的多对多关系
【发布时间】:2010-12-16 16:40:00
【问题描述】:

我的第一个 Core Data 项目遇到问题...

我在多对多关系中有两个实体:引号 > Boilers。

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

我认为下面的代码失败了,因为 Predicate 不知道 选择了哪个 Boiler,但我不能完全正确...

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

    } 

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

【问题讨论】:

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


    【解决方案1】:

    解决这个问题的一种方法是使用 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
                }
    
            }
        }
    

    不管怎样,你有没有尝试过这样的事情?

    【讨论】:

    • 这似乎是正确的方法,但你能指出我在你的例子中对“包含”命令的引用吗,编译器不喜欢它,我正在努力寻找教程。谢谢。
    • 这是我的错误 - 请参阅编辑以进行更正。 [[self quote]boilers] 返回一个 NSSet。 -containsObject:是 NSSet 的实例方法。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2011-02-18
    • 2016-09-08
    • 1970-01-01
    相关资源
    最近更新 更多