0

クラス「SensorDB」のオブジェクトへの「センサー」という名前の強力なポインターがあります。

「センサー」オブジェクト内で何かが変更された場合に UIViewController が通知されるように、NSFetchedResultController を作成しようとしました。

目的のオブジェクトを NSFetchedResultController に取得するために、次の NSPredicate を作成しました。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self == %@", self.sensor];

目標は、NSFetchedResultController にオブジェクトを 1 つだけ配置し、更新に関する通知を取得して、GUI を更新できるようにすることです。

しかし、アプリケーションを実行すると、NSFetchedResultController を割り当てて初期化しようとすると、アプリケーションがクラッシュします。

ここに私の NSFetchedResultController コードがあります:

- (NSFetchedResultsController *)fetchedResultsControllerSensor
{
    if (_fetchedResultsControllerSensor != nil) {
        return _fetchedResultsControllerSensor;
    }

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

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"SensorDB" inManagedObjectContext:dbHandler.managedObjectContext];
    [fetchRequest setEntity:entity];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self == %@", self.sensor];
    [fetchRequest setPredicate:predicate];

    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController =
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:dbHandler.managedObjectContext sectionNameKeyPath:nil cacheName:@"SensorCache"];
    self.fetchedResultsControllerSensor = theFetchedResultsController;
    _fetchedResultsControllerSensor.delegate = self;

    return _fetchedResultsControllerSensor;
}

あなたの助け、または別の/より良いアプローチをありがとう

リナード

4

1 に答える 1

0

結果オブジェクトが 1 つしかないので、並べ替え記述子は必要ないと思いましたが、少なくとも 1 つの NSSortDescriptor がないと、NSFetchedResultController の初期化がクラッシュするようです。

それが私の NSPredicate と NSSortDescriptor です。

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(SELF = %@)", self.sensor];
[fetchRequest setPredicate:predicate];

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"displayOrder" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
于 2013-06-01T19:37:43.543 に答える