Ios 在运行时检查/加载核心数据

Ios 在运行时检查/加载核心数据,ios,objective-c,core-data,Ios,Objective C,Core Data,我有一个应用程序,它有一个名为Holidays的实体。我需要为我的应用程序预先填充几年的假期 我想我可以检查Holidays实体并在运行时加载它,方法是将代码放在AppDelegate didFinishLaunchingWithOptions方法中……我可以检查它是否已经有记录,如果没有,就添加它们 有更好的方法吗 另外,我尝试对实体执行一个简单的fetchrequest来计数记录(作为查看它是否已经加载的一种方式),但不断得到错误,即我的数组是空的。如何检查实体是否为空而不出错 这当然会死,

我有一个应用程序,它有一个名为Holidays的实体。我需要为我的应用程序预先填充几年的假期

我想我可以检查Holidays实体并在运行时加载它,方法是将代码放在AppDelegate didFinishLaunchingWithOptions方法中……我可以检查它是否已经有记录,如果没有,就添加它们

有更好的方法吗

另外,我尝试对实体执行一个简单的fetchrequest来计数记录(作为查看它是否已经加载的一种方式),但不断得到错误,即我的数组是空的。如何检查实体是否为空而不出错

这当然会死,但我试过:

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

    // set up the default data

    //holiday dates
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Holidays" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    NSError *error = nil;
    NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
    if (fetchedObjects == nil) {
        NSLog(@"The entity is empty");
    }
    else {

        NSLog(@"The entity is loaded");
    }

    return YES;
}
这是“两个问题合一”,所以我要回答第二个问题:-)

executeFetchRequest
如果发生错误,则返回
nil
。所以你的支票应该 看起来像:

NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
    // report error
} else if ([fetchedObjects count] == 0) {
    NSLog(@"The entity is empty");
}
else {
    NSLog(@"The entity is loaded");
}

(对于预填充数据库,查看../p>),您还需要考虑用户可能删除所有这些记录,然后重新启动应用程序的可能性,在这种情况下,您不想重新填充记录。为了解决这个问题,我在核心数据中有一个主表(实体),用于跟踪生命周期。这不是一张用户可以随意使用的表格,而是应用程序使用的表格。在本文中,我保留了一些用户首选项和状态,例如跟踪数据库是否需要填充种子数据。如果您计划使用具有核心数据的iCloud,那么您还需要一些策略来处理设备创建iCloud中已存在的新文档时的情况(已经在其他设备上进行了初始化)。在这种情况下,您可能不想填充任何初始数据。事实上,我正计划使用iCloud,因此这将是一个问题。至于数据本身,我不打算允许用户删除数据,我只是存储假期,以便在用户选择的日期为假期。我仍然不确定什么是处理这件事的最好方法。我很感激所有的信息。