0

特定の属性と一致するかどうかを確認して、データを取得したい 2 つのテーブルがあります。

述語などを書きたいのですが、解決策を思いつくことができないようです: @"Data.item == Item.code".

リレーションシップを使用しない理由は、データベースが mysql からインポートされたためです。したがって、すべてのデータはアプリの外部から取得され、ダウンロードされた mysql テーブルから同期されます。

- - - - - - - - - - - - - -編集 - - - - - - - - - - - --- 私がこれまでに多くのことを試してきたのは、私が今これをやっているくだらない方法です。おそらくこれから私がやろうとしていることをもっと理解できるでしょう。

 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 は、渡したテーブルの述語を使用してデータをフェッチするだけの説得メソッドです。次に、それらをループする NSmanaged オブジェクトの返された領域を取得します。

Data.items に一致するすべての Item.data を取得できる魔法の関係を作成できたらいいのにと思います!!! こんなことはしたくない、そんな関係を築きたい。

助けて ありがとう

4

1 に答える 1

1

2 つのオブジェクトが実際には同じオブジェクトである場合にのみ、述語の等価性は true になります。あなたはこれを行うことができます:

[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];
于 2012-08-01T12:45:11.307 に答える