【发布时间】:2013-08-08 11:35:14
【问题描述】:
我有一个存储日期的 CoreData 实体 Tracker。
应用收到通知,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]);
}];
CoreData 模型:
更新 1:
如您所见,有两个实体,即Habit 和Tracker。当我从Habit 获取结果时,一切正常,但是当我尝试从Tracker 获取结果时,它给了我一个空数组。我有一个常见的NSManagedObjectContext 实例,因为您可以使用单个managedObjectContext 管理多个CoreData 实体。
我检查了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];
【问题讨论】:
-
你能用代码展示你如何在 coredata 中保存对象吗?
-
很高兴看到您用来保存对象的代码。
-
@Firo:更新了我的问题。
-
尝试删除你的
performBlockAndWait,然后在主线程上执行它。还有为什么你的save不工作?你有例外吗? -
@Firo..with/without performBlockAndWait,不工作。当我说
save不起作用时,我的意思是即使在那之后它也不起作用。save不会产生任何错误。
标签: ios objective-c core-data nsmanagedobjectcontext