0

「名前」という名前のエンティティ プロパティで一意の結果を取得しようとしています。その目的のためにNSFetchedResultsControllerでMagical Recordを使用しています。すべての結果が得られますが、それらは一意の結果ではありません。

それを機能させるための私のコードは次のとおりです。

- (NSFetchedResultsController *)fetchedResultsController
{
    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"custom == 0"];

    [_fetchedResultsController.fetchRequest setReturnsDistinctResults:YES];
    [_fetchedResultsController.fetchRequest setResultType:NSDictionaryResultType];
    [_fetchedResultsController.fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:@"name"]];


    _fetchedResultsController = [MyQuestion fetchAllSortedBy:@"name"
                                                   ascending:YES
                                               withPredicate:predicate
                                                     groupBy:nil
                                                    delegate:self];

    return _fetchedResultsController;
}

また、ネイティブの NSFetchedResultsController メソッド (Magical Record なし) を使用しようとしましたが、アプリ デリゲートで Magical Record を使用してデータを初期化しているため、データベースが壊れているという例外が発生します。

4

1 に答える 1

1

この場合に使用するテクニックは次のとおりです。

  1. カスタム オプションを使用してフェッチ リクエストを作成する
  2. 後はMagicalRecordに引き継がせて

したがって、MR_requestAllSortedBy: と呼ばれる nsmanagedobject のカテゴリ メソッドを探します。それよりも多くのリクエスト ヘルパーがありますが、これにより正しい方向に進むことができます。フェッチ リクエストを作成したら、setReturnsDistinctResults などのオプションを設定します。次に、これを MagicalRecord ヘルパー/パイプラインに送り返すために、MR_fetchController:... メソッドをローカル コピーで公開する必要があります。このメソッドは、フェッチ リクエストとその他のオプションを受け取り、エラー処理なども処理します。

于 2012-08-10T15:17:49.060 に答える