两个表之间的核心数据Where子句?

时间:2012-08-01 10:00:20

标签: ios core-data

我有两个表,我想通过查看它们是否与特定属性匹配来获取数据。

我想写一个谓词或类似的东西,但我似乎无法提出解决方案:@"Data.item == Item.code"

我不使用关系的原因是因为我的数据库是从mysql导入的。因此,所有数据都来自应用程序之外,它是从下载的mysql表中同步的。

--------------------------- EDIT ------------------- ------ 我到目前为止所做的很多事情都是我现在这样做的糟糕方式,也许从这里可以了解更多我想要做的事情。

 NSPredicate * Newpredicate = [NSPredicate predicateWithFormat:@"hid == 2"];
    NSArray *row2 = [db DLook:Newpredicate table:@"Data"];
    for (NSManagedObject *data in row2) {
        NSLog(@"\n\n\n\nid\n\n\n\n: %@", [data valueForKey:@"id"]);
        NSString *itemToCode = [data valueForKey:@"item"];
        NSPredicate *itemPredicate = [NSPredicate predicateWithFormat:@"code == %@",itemToCode];
        NSArray *itemRow = [db DLook:itemPredicate table:@"Item"];
        for (NSManagedObject *item in itemRow) {
            NSLog(@"\n\n\n\ncode : %@\n\n\n\n",[item valueForKey:@"code"]);
        }
       // NSLog(@"id: %@", [data valueForKey:@"id"]);
        //NSManagedObject * itemhid= [data valueForKey:@"testRel"];
        //NSLog(@"code: %@",[itemhid valueForKey:@"code"]);
    }
    NSLog(@"\n\n\n\n%d\n\n\n\n",[row2 count]);

DLook是一种conince方法,它只使用我传递的表上的谓词来获取数据。然后将NSmanaged对象的返回区域循环遍历它们。

我希望我能够建立一个神奇的关系,让我得到一个与Data.items匹配的所有Item.data! 我不想这样做,我想建立一个像这样的关系。

帮助 感谢

1 个答案:

答案 0 :(得分:1)

如果两个对象实际上是同一个对象,那么谓词中的相等性就是真的。你可以这样做:

[NSPredicate predicateWithFormat:@"item = %@", code];

但是,您应该在导入模型时尝试正确地建立关系。然后你甚至不必从商店取货,只需使用

dataObject.item;

因此,当您导入时执行以下操作:

// get one data object from your source
// get the corresponding item object from your source
Data *dataObject = [NSEntityDescription insertNewObjectForEntityForName:@"Data"
     inManagedObjectContext:self.managedObjectContext];
Item *itemObject = [NSEntityDescription insertNewObjectForEntityForName:@"Item"
     inManagedObjectContext:self.managedObjectContext];
[dataObject addItemObject:itemObject];