0

これは一日中私を夢中にさせています。

NSPredicate に絞り込んだと思われる奇妙なバグがあります。List と Person の 2 つのエンティティがあります。List は Persons と呼ばれる Person と対多の関係を持ち、Person は Lists と呼ばれる List と対多の関係を持ちます。

テーブルビュー コントローラーに List オブジェクトを渡します。次に、そのテーブルビュー コントローラーに、そのリスト オブジェクトに属する人物を表示させたいと考えています。私はNSFetchedResultsControllerでこれをやっています。

NSFRC をセットアップするとき、次のコードを使用します (明確にするためにメモリ管理は省略されています)。問題のリストは次のmyListとおりです。

// Create the request and set it's entity
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

// Create a predicate to get the persons that belong to this list
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList];

// Assign this predicate to the fetch request
[fetchRequest setPredicate:predicate];

// Define some descriptors
NSSortDescriptor *locationDescriptor = [[NSSortDescriptor alloc] initWithKey:@"location" ascending:YES];
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:locationDescriptor, lastNameDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

// Create and initialize the fetch results controller.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"location" cacheName:nil];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;

問題はこの行にあると思います(削除すると消えるため):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList];

親ビューがmyListテーブルビューコントローラーに渡されると、シミュレーターがハングアップします。コンソールなどにクラッシュログはありません。NSFRC を整理するために AGES を使用しているように見えます。

これは私が使用している述語に問題がありますか?

4

3 に答える 3

1

tableViewControllerに渡されたリストからsをNSFetchedResultsController取得できる場合に使用する必要がありますか?Person

NSSet *people = myList.persons;
于 2010-07-05T03:18:00.980 に答える
1

あなたは正しいです、あなたはただ使うことができますmyList.personsNSFetchedResultsControllerこの状況では必要ありません。

于 2010-07-05T03:23:55.583 に答える
0

re: NSSet の使用に関する提案をありがとうございます。何時間ものバグ追跡の後、問題はテーブル ビューの cellForIndexPath メソッドにあることに気付きました (つまり、NSFRC とは関係ありません)。

于 2010-07-05T16:29:12.780 に答える