1

Units と BUnits の 2 つのエンティティがあり、Units エンティティには何度も置き換えられるデータがあり、BUnits はデータを消去する前に Units エンティティのバックアップになります。

インスタンスを作成したらNSManagedObjectContext、次を使用して各エンティティのインスタンスを取得しました

NSManagedObjectContext *context = [mainDelegate managedObjectContext];

NSEntityDescription *unitsEntity = [NSEntityDescription entityForName:@"Units" inManagedObjectContext:context];

NSEntityDescription *bUnitsEntity = [NSEntityDescription entityForName:@"BUnits" inManagedObjectContext:context];

しかし、各レコードのループを作成する以外に、Units エンティティ レコードを BUnits エンティティにコピーすることはできませんでしたが、より良い解決策があると思います。

これについてどう思いますか、より良い解決策はありますか?

アップデート:

誰かがそれを使用できる場合に私が使用した解決策は私の答えにあります。これを行うためのより良い方法があると思います。私はそれをチェックし続け、何か見つかったら質問を更新します。

4

2 に答える 2

1

各レコードのループを使用して、私が使用したものは次のとおりです。

- (void) copyEntities:(NSString *)sourceEntity And:(NSString *)destinationEntity {
NSManagedObjectContext *context = [mainDelegate managedObjectContext];

NSEntityDescription *Units = [NSEntityDescription entityForName:sourceEntity inManagedObjectContext:context];
NSEntityDescription *BUnits = [NSEntityDescription entityForName:destinationEntity inManagedObjectContext:context];

NSFetchRequest *dataRequest = [[NSFetchRequest alloc] init];

[dataRequest setEntity:Units];

NSError *error = nil;

NSArray *dataArray = [context executeFetchRequest:dataRequest error:&error];

for (UnitsClass *unit in dataArray) {

    UnitsClass *savedUnits;

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:BUnits];
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"(code = %@)", unit.code];
    NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"(code2 = %@)", unit.code2];

    NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:pred, pred1, nil]];

    [request setPredicate:compoundPredicate];

    NSError *error = nil;

    NSArray *objects = [context executeFetchRequest:request error:&error];

    //this if to indicate if we inserting to the BUnits or updating it.
    if ([objects count] > 0) {
        //Found the record, update The info
        savedUnits = [objects objectAtIndex:0];
    } else {
        savedUnits = [NSEntityDescription insertNewObjectForEntityForName:destinationEntity inManagedObjectContext:context];
    }

    savedUnits.code = unit.code;
    /*Add your updated info*/

    NSError *errors;
    if (![context save:&errors]) {
        NSLog(@"Whoops, couldn't save: %@", [errors localizedDescription]);
    }
}

NSLog(@"BUnits count = %d",[context countForFetchRequest:[NSFetchRequest fetchRequestWithEntityName:destinationEntity] error:&error]);
}
于 2012-07-26T07:24:27.853 に答える
0

与えられた情報に基づいて、各ユニット オブジェクトをループし、バックアップ オブジェクトを作成する以外に良い方法はありません。

于 2012-07-16T12:45:43.447 に答える