【问题标题】:Why is Core Data not setting up properly on iOS 4?为什么 Core Data 没有在 iOS 4 上正确设置?
【发布时间】:2012-04-29 11:21:40
【问题描述】:

我正在开发一个使用 Core Data 的应用程序。在 iOS 5 中,我没有任何问题。

但是,在 iOS 4 中,当我尝试保存任何信息时,我会收到一条错误消息(更准确地说:Cocoa 错误 134030 和“没有这样的文件或目录”)。当我查看文档文件夹时,SQL 文件不存在。我已经调试过了,这些方法都不会导致错误或nil 指针。

最奇怪的部分:方法addPersistentStoreWithType没有返回任何错误,但同时没有创建sqlite文件。

在一行中,我的应用程序没有在文档文件夹中创建 sql 文件。同样,这只发生在 iOS 4 中。

为什么我的应用无法在 iOS 4 上创建 sqlite 文件?

//Core Data stack

- (NSManagedObjectContext *)managedObjectContext
{

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
    __managedObjectContext = [[NSManagedObjectContext alloc] init];
    [__managedObjectContext setPersistentStoreCoordinator:coordinator];
}

return __managedObjectContext;
}

- (NSManagedObjectModel *)managedObjectModel
{
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Practi" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

if (__managedObjectModel == nil)
{
    NSLog(@"NSManagedObjectModel in AppDelegate == nil");
}

return __managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyAppDataBase.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
{

    NSLog(@"APPDELEGATE Unresolved error %@, %@", error, [error userInfo]);
}

return __persistentStoreCoordinator;
}

- (NSURL *)applicationDocumentsDirectory
{
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
return [NSURL fileURLWithPath:docsDirectory];
}

【问题讨论】:

  • 请包含您定义持久存储的代码。
  • 添加代码,谢谢。顺便说一句,我已经调试过了,在这些方法中的任何一个都有错误。

标签: iphone core-data ios4


【解决方案1】:

有时,您应该为您的文件使用扩展名 mom,有时应使用 momd。第一个是文件,第二个是引用目录。

我看到嵌入式资源有时需要使用mom 扩展文件才能正确加载文件(如果是来自框架的资源,则没有目录)。也许是这样。

【讨论】:

    【解决方案2】:

    我发现了解决问题的方法:

    当上面编写的每个方法被调用时,我正在重新创建对象,而不是检查它是否已经存在并返回。因此,就像现在的代码一样,它也可以在 iOS 4 中运行。

    【讨论】:

      猜你喜欢
      • 2014-08-05
      • 2023-03-07
      • 2015-10-30
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多