我有一个Tracker
存储日期的 CoreData 实体。应用程序收到通知并CheckListViewController
在 CoreData 中输入数据长达 13 天,因此当 CheckListViewController 被关闭时,CoreData 实体Tracker
将填充 13 行。
在MainViewController
(其中驳回CheckListViewController
)中,我有以下代码:
- (void)dataSaved {
self.checkListVC dismissViewControllerAnimated:YES completion:^{
// fetching all the data from 'Tracker' entity and doing NSLog on it
// all data gets logged in console without any issues
}];
}
现在,在我的代码中某处之后,我从实体中获取所有数据,Tracker
但返回数据为空。CoreData 没有显示任何错误,它只是返回和空数组。
编辑:从 CoreData 获取结果的代码
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:ENTITY];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
[request setSortDescriptors:@[sortDescriptor]];
request.predicate = (fromDate && toDate) ? [NSPredicate predicateWithFormat:@"date >= %@ AND date <= %@", fromDate, toDate] : nil;
__block NSArray* fetchedHabits;
[managedObjectContext performBlockAndWait:^{
NSError *error = nil;
fetchedHabits = [managedObjectContext executeFetchRequest:request error:&error];
if (error) NSLog(@"Unknown error occurred while fetching results from CoreData, %@ : %@", error, [error userInfo]);
}];
核心数据模型:
更新 1:如您所见,有两个实体,即Habit
和Tracker
。当我从中获取结果时Habit
,一切正常,但是当我尝试从中获取结果时,Tracker
它给了我一个空数组。我有一个通用NSManagedObjectContext
实例,因为您可以使用单个managedObjectContext
. 我已经检查过了managedObjectContext.persistentStoreCoordinator.managedObjectModel.entitiesByName
,它还列出了这两个实体。
更新 2:我在其中添加数据的代码Tracker
TrackerCoreData *tracker = [NSEntityDescription insertNewObjectForEntityForName:ENTITY
inManagedObjectContext:managedObjectContext];
tracker.date = date;
tracker.habits = habits;
// saving CoreData explicitly
NSError *error = nil;
[managedObjectContext save:&error];