0

我有一个名为“sensor”的强指针,指向“SensorDB”类的对象。

我尝试创建一个 NSFetchedResultController 以便在“传感器”对象内部发生变化时通知我的 UIViewController。

为了将所需的对象放入我的 NSFetchedResultController,我创建了以下 NSPredicate:

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

目标是,我在 NSFetchedResultController 中只有一个对象并获得有关任何更新的通知,以便我可以更新我的 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

我想,我不需要排序描述符,因为我只有一个结果对象,但看起来 NSFetchedResultController 的初始化会崩溃,如果至少没有一个 NSSortDescriptor。

这就是我的 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 回答