【问题标题】:unable to get objects using NSFetchedResultsController with multiple context无法使用具有多个上下文的 NSFetchedResultsController 获取对象
【发布时间】:2015-03-30 18:55:28
【问题描述】:

我正在尝试将 NSFetchedResultsController 与一个额外的 NSManagedObjectContext 一起使用,这与我在我的应用程序中使用的主 MOC 不同。虽然我可以使用额外的 MOC 保存和检索数据,但每次我尝试创建 NSFetchedResultsController 时,它都会返回一个带有 nil fetchedObjects 的对象。

我正在使用 MagicalRecord,这是我正在使用的代码:

- (id) init
{
    if(SINGLETON){
        return SINGLETON;
    }
    if (isFirstAccess) {
        [self doesNotRecognizeSelector:_cmd];
    }
    self = [super init];
    if (self) {
        NSManagedObjectModel *model = [NSManagedObjectModel MR_newManagedObjectModelNamed:@"ConnectorCache.momd"];
        [NSManagedObjectModel MR_setDefaultManagedObjectModel:model];
        storeCoordinator = [NSPersistentStoreCoordinator MR_coordinatorWithAutoMigratingSqliteStoreNamed:@"ConnectorCache.sqlite"];
        cacheContext = [NSManagedObjectContext MR_contextWithStoreCoordinator:storeCoordinator];

        [MagicalRecord setShouldAutoCreateManagedObjectModel:YES];

    }
    return self;
}

获取fetchedResultsController的代码是:

- (NSFetchedResultsController *) fetchedResultsController {

    if (_fetchedResultController != nil) {
        return _fetchedResultController;
    }

    NSFetchRequest *request = [Appointment MR_requestAllSortedBy:@"start" ascending:YES inContext:cacheContext];
    _fetchedResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:cacheContext sectionNameKeyPath:@"day" cacheName:nil];
    return _fetchedResultController;
}

如果我使用请求来获取数据,它可以正常工作:

(lldb) po [cacheContext executeFetchRequest:request error:nil];
<_PFBatchFaultingArray 0x7fd9ca576710>(
<Appointment: 0x7fd9ca4c7220> (entity: Appointment; id: 0xd00000000004000a <x-coredata://36BACA76-7C2B-413C-8782-F92BBC7C1AA7/Appointment/p1> ; data: {
    attendees = "<relationship fault: 0x7fd9ca518400 'attendees'>";
    attendeesOmitted = nil;
    created = "2015-03-10 16:41:31 +0000";
    creator = nil;
    end = "2015-03-18 18:45:00 +0000";
    eventDescription = "Doctor Garc\U00eda Villaran";
    eventID = "_8gs3ecpi8h0jab9i6op3ib9k6gp3iba18kojiba68d1j8c2260pj4e1o64";
    lastUpdated = "2015-03-10 16:42:13 +0000";
    location = "Centro M\U00e9dico Quir\U00f3n Sevilla Este, Sevilla, ES";
    start = "2015-03-18 17:45:00 +0000";
    status = 0;
    title = "Cita otorrino";
})
)

我看不到我错过了什么……

亲切的问候

【问题讨论】:

    标签: xcode core-data magicalrecord


    【解决方案1】:

    我是我的错,我错过的是我正在使用 MagicalRecord,它实际上提供了一种获取 NSFetchedResultsController 的方法。

    NSManageObject MR_fetchAll… 或者朋友会做这项工作。就我而言,我使用:

    _fetchedResultController = [Appointment MR_fetchAllSortedBy:@"start"
                                                          ascending:YES
                                                      withPredicate:nil
                                                            groupBy:@"day"
                                                           delegate:nil
                                                          inContext:cacheContext];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多