【问题标题】:persistance in iPhone Core DataiPhone核心数据中的持久性
【发布时间】:2011-01-25 23:39:13
【问题描述】:

我正在尝试使用核心数据将 系列 的持久数据 (NSManagedObjects) 写入 sqlite,然后将该系列读入应用程序。我已经设法在单个会话期间写入和读取 single 记录,但是每次我重新加载应用程序时都不会加载以前的数据(并且 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 以标准方式处理。

任何帮助将不胜感激

谢谢

佩曼

【问题讨论】:

  • sqlite 管理器在尝试查看 CoreData 存储的数据时根本不会帮助您。您将不得不使用 Core Data Editor (christian-kienle.de/CoreDataEditor) 之类的东西

标签: iphone core-data


【解决方案1】:

你在保存你的 managedObjectContext 吗?

NSError *error = nil;
if (![context save:&error]) {
    // Handle the error
}

您可以获取已放入上下文中的对象,但除非您将上下文保存到持久存储中,否则下次它们将不可用。

【讨论】:

  • 这是一个很好的答案,但您应该从不将 nil 传递给保存。始终传递错误并检查您的错误。即使在示例中:)
  • 嗨库比。是的,我正在保存上下文。我正在使用一个辅助函数 -(void) writeDB { NSError *error; if (![managedObjectContext save:&error]) { // 处理错误。 } }
【解决方案2】:

我发现了问题。上下文没有保存(我没有处理错误),因为在保存之前没有设置强制属性(错误 1520)。

谢谢大家的帮助

佩曼

【讨论】:

    【解决方案3】:

    您在哪里致电save?您是否有可能没有刷新到 NSPersistentStoreCoordinator?

    【讨论】:

    • 嘿iPhoneDollaraire。是的,我通过调用辅助函数来保存我的上下文 -(void) writeDB { NSError *error; if (![managedObjectContext save:&error]) { // 处理错误。 } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多