1

でコアデータの問題が発生していNSFetchedResultsControllerます。親と子のエンティティの間には1対多の関係があります。プロパティ内の配列はchildFetchedResults.fetchedObjects並べ替えられませんnumber(数値はモデル内のint32プロパティです)。MagicalRecordコンビニエンスカテゴリメソッドを使用するかどうかは問題ではないようです。

NSFetchRequest *req = [Child MR_requestAllSortedBy:@"number" ascending:YES withPredicate:[NSPredicate predicateWithFormat:@"parent = %@", self.parent]];
childFetchedResults = [[NSFetchedResultsController alloc] initWithFetchRequest:req managedObjectContext:[NSManagedObjectContext MR_defaultContext] sectionNameKeyPath:nil cacheName:nil];
childFetchedResults.delegate = self;
NSError *error;
[childFetchedResults performFetch:&error];
NSLog(@"fetched objects: %@", childFetchedResults.fetchedObjects);

ただし、まったく同じ並べ替え記述子を使用してフェッチされたオブジェクトの配列を並べ替えると、正常に機能します。

NSLog(@"fetched objects: %@", [childFetchedResults.fetchedObjects sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"number" ascending:YES]]]);

フェッチ要求のソート記述子を指定するときにCoreDataがSQLiteストアに渡すことができるコンパレーターのみを使用できることを私は収集します。しかし、SQLiteでは数値による並べ替えがサポートされている必要があるため、この場合は問題にならないように感じます。

誰かがこれを解決しましたか?ここで説明されている問題と同様の問題のように感じます:NSSortDescriptorが呼び出されていません

に関してはMR_requestAllSortedBy、それはMagicalRecordにあります、ここに実装があります:

+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context
{
    NSFetchRequest *request = [self MR_requestAllInContext:context];

    NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey:sortTerm ascending:ascending];
    [request setSortDescriptors:[NSArray arrayWithObject:sortBy]];

    return request;
}
4

2 に答える 2

2

したがって、これは、変更が保存されていないネストされたMOCに対してフェッチすることによって発生しました。親MOCでフェッチするか、フェッチを実行する前にネストされたMOCを保存すると、問題が解決します。この質問で起こっていたことと同様です:NSSortdescriptorはNSManagedContextからの結果のフェッチに無効です

于 2012-06-18T03:25:14.463 に答える
0
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"RemainderDataBase" inManagedObjectContext:[self managedObjectContext]];
    NSSortDescriptor *nameSort = [[NSSortDescriptor alloc]initWithKey:@"title" ascending:YES];
    NSArray *sortDescriptor = [[NSArray alloc]initWithObjects:nameSort, nil];
    fetchRequest.sortDescriptors = sortDescriptor;
    NSPredicate *p1=[NSPredicate predicateWithFormat:@"startdate > %@", [NSDate date]];
    [fetchRequest setPredicate:p1];
    [fetchRequest setEntity:entity];

上記のコードを探していると思います..

于 2016-06-17T11:52:14.190 に答える