0

これは私のコアデータ構造です

エンティティ -カテゴリ

Attr - ID (NSString)主キー名前(NSString)

エンティティ -製品

Attr - ID (NSString)、名前(NSString)、parentCategoryId (NSString)外部キー、....

上記からわかるように、Category の Idは Product の parentCategoryId を指しています。

この場合、 UITableView のセクション名として、product の当該の parentCatergoryId に関連付けられたカテゴリの名前を使用したいと考えています (私はfetchrequestで NSSortDescriptors のキーとして @"parentCategoryId" を使用しています) 。

英数字のテキスト、つまりparentCatrgoryIdを製品からカテゴリの名前にデコードするにはどうすればよいですか

編集

これが私がしたことであり、その作業です。しかし、私がしたことが効率的であるかどうかを尋ねたいのです。

parentCategoryIdNameという名前の属性をもう 1 つ追加し、これを使用して、簡単な操作を計算して正確な名前を格納しました。

.h ファイル

@property (nonatomic, retain) NSMutableArray *categoryArr;
@property (nonatomic, retain) NSMutableArray *productArr;

.m ファイル

   NSEntityDescription *entity = [NSEntityDescription entityForName:@"Category" inManagedObjectContext:self.MOContext];
    // Setup the fetch request
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entity];
    //    [request setPredicate:[NSCompoundPredicate andPredicateWithSubpredicates:subpredicates]];

    NSError *error;
    NSMutableArray *mutableFetchResults = [[self.MOContext executeFetchRequest:request error:&error] mutableCopy];
    [self setCategoryArr: mutableFetchResults];

    NSEntityDescription *entity2 = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:self.MOContext];
    // Setup the fetch request
    NSFetchRequest *request2 = [[NSFetchRequest alloc] init];
    [request2 setEntity:entity2];
    //    [request2 setPredicate:[NSPredicate predicateWithFormat:@""]];
    NSError *error2;
    NSMutableArray *mutableFetchResults2 = [[self.MOContext executeFetchRequest:request2 error:&error2] mutableCopy];
    [self setProductArr: mutableFetchResults2];

DBにデータを挿入するには

    for (int i=0; i< [self.productArr count]; i++) {
        Product *productEnt = [self.productArr objectAtIndex:i];
        NSManagedObjectContext *context = self.MOContext;

            for (int j=0; j<self.categoryArr.count; j++) {
                Category *categroy = [self.categoryArr objectAtIndex:j];
                if ([categroy.objectId isEqualToString:productEnt.parentCategoryId]) {
                    [productEnt setParentCategoryIdName:categroy.name];
                }

            // Save the context.
            NSError *error = nil;
            if (![context save:&error]) {
                // Replace this implementation with code to handle the error appropriately.
                // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
                NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
                abort();
            }
        }
4

1 に答える 1

0

要約
すると、私が収集したものから、セクションを形成してセクションのタイトルに表示するには、ID/名前が必要です。

あなたのソリューションは効率的なIMOですが、最後の手段にする必要があります:

アイデア: titleForSectionAtIndex を返す必要がある場合、categoryId JIT から categoryName を取得します。

または、それが遅すぎる場合。

結果をリロードするときにすべてのセクション名を取得します。

=>データベースに保持してデータを複製しないでください

しかし

本当に遅すぎることがわかった場合は、その方法でデータを非正規化することは良い IMO です (これは検討する最後の解決策です)。

于 2012-12-04T08:59:24.923 に答える