我正在尝试使用核心数据将持久数据(NSManagedObjects)的系列写入sqlite,然后将该系列读入应用程序。我在单个会话期间设法编写并读取单个记录,但每次重新加载应用程序时都不会加载以前的数据(并且sqlite管理器识别表但不识别表中的任何条目) 。
这里有一些核心数据逻辑:
在applicationDidFinishLaunching中:我设置3个控制器的managedObjectContext属性
inputControl.managedObjectContext = context;
reportControl.managedObjectContext = context;
logControl.managedObjectContext = context;
然后在inputControl中添加 Event NSManagedObjects,例如
[event setDateCreated:[NSDate date]];
并在logControl中读取事件日志
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateCreated" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
NSLog(@"Error fetching from DB");
}
int i;
NSLog(@"size of DB: %d",mutableFetchResults.count);
for (i=0; i<mutableFetchResults.count; i++)
NSLog(@"event %d: %@",i,[mutableFetchResults objectAtIndex:i]);
[mutableFetchResults release];
[request release];
当我运行此代码时,我看到“DB的大小:”始终设置为“1”。 managedObjectModel,managedObjectContext和persistentStoreCoordinator正在以标准方式处理。
非常感谢任何帮助
谢谢
Peyman的
答案 0 :(得分:3)
您是否正在保存您的managedObjectContext?
NSError *error = nil;
if (![context save:&error]) {
// Handle the error
}
您可以获取已放入上下文中的对象,但除非将上下文保存到持久性存储中,否则下次无法使用它们。
答案 1 :(得分:0)
您拨打save
的电话在哪里?您是否有可能不会冲到NSPersistentStoreCoordinator?
答案 2 :(得分:0)
我发现了问题。上下文没有保存(我没有处理错误)因为在保存之前没有设置强制属性(错误1520)。
谢谢大家的帮助
Peyman的