【问题标题】:Core Data app failed to launch in timeCore Data 应用未能及时启动
【发布时间】:2013-03-29 05:03:40
【问题描述】:

我有一个在 application:didFinishLaunchingWithOptions 中创建持久存储的应用程序。添加商店显然需要很长时间,这会导致 iOS 在应用程序完成启动之前终止应用程序。 如何将商店添加到主线程之外的协调器?有什么例子吗? stackoverflow link

操作系统版本:iOS 6.1.3 (10B329) 报告版本:104

异常类型:00000020 异常代码:0x000000008badf00d 突出显示的线程:0

应用特定信息: com.maksanzhi.person 未能及时启动

经过的总 CPU 时间(秒):13.470(用户 13.470,系统 0.000),22% CPU 已用应用程序 CPU 时间(秒):0.343,1% CPU

线程 0 名称:调度队列:com.apple.main-thread 线程 0:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

if (_persistentStoreCoordinator != nil) {
    return _persistentStoreCoordinator;
}

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"COOLPERSONS.sqldata"];

NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:[storeURL path]]) {

    NSURL *defaultStoreURL = [[NSBundle mainBundle] URLForResource:@"COOLPERSONS" withExtension:@"sqldata"];
    if (defaultStoreURL) {
        [fileManager copyItemAtURL:defaultStoreURL toURL:storeURL error:NULL];
        [self addSkipBackupAttributeToItemAtURL:storeURL];
    }
}


NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

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

return _persistentStoreCoordinator;



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

UINavigationController *nav = (UINavigationController *)self.window.rootViewController;
MainViewController *cvtc = (MainViewController *)[[nav viewControllers]objectAtIndex:0];
cvtc.managedObjectContext = self.managedObjectContext;
[self setAppereance];
return YES;

}

【问题讨论】:

  • 仅仅创建一个商店通常不会花费太多时间。你能向我们展示你所有的启动代码吗?也许探查器将有助于您确定您的启动时间在哪里被占用。
  • 我用更多信息编辑了这个问题。

标签: ios sqlite core-data appdelegate


【解决方案1】:

作为一般建议,您不应该在 applicationDidFinishLaunching 方法中创建任何内容。 Core data Persistent Store 创建起来并不繁重,但由于迁移过程,在功能中可能会很重。为了确保这是持久存储而不是其他东西,请尝试注释掉那部分代码。 您是否正在使用数据初始化存储?

【讨论】:

  • 是的,我用数据初始化存储。我可以发送或分享我的代码吗?
  • 这就是重点。你不应该在这里这样做。最好显示一个模态视图控制器,带有来自根视图控制器的微调器并在此处初始化。 applicationDidFinishLaunching 必须尽快返回。我不需要你的代码,我很确定问题就在这里。
  • 非常感谢 Andrea,我是新的 iOS 开发者请问如何使用微调器显示模态视图控制器?
  • 你好 Astakhoff 这样做需要不同的时间,我认为你更好地理解而不是仅仅复制和粘贴。 Core Data 不是初学者的话题,你应该对 OSX 编程或 iOS 编程有非常扎实的基础我很确定你会理解并找到方法来做到这一点。本质上,您正在使用该操作阻塞主线程,如果 appDidFinishLauching 在一定时间内没有返回,它将调用杀死您的应用程序的看门狗。您需要做的是将数据库的所有初始化数据复制到其他地方。干杯
猜你喜欢
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多