Ios 在运行时检查/加载核心数据
我有一个应用程序,它有一个名为Holidays的实体。我需要为我的应用程序预先填充几年的假期 我想我可以检查Holidays实体并在运行时加载它,方法是将代码放在AppDelegate didFinishLaunchingWithOptions方法中……我可以检查它是否已经有记录,如果没有,就添加它们 有更好的方法吗 另外,我尝试对实体执行一个简单的fetchrequest来计数记录(作为查看它是否已经加载的一种方式),但不断得到错误,即我的数组是空的。如何检查实体是否为空而不出错 这当然会死,但我试过:Ios 在运行时检查/加载核心数据,ios,objective-c,core-data,Ios,Objective C,Core Data,我有一个应用程序,它有一个名为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,因此这将是一个问题。至于数据本身,我不打算允许用户删除数据,我只是存储假期,以便在用户选择的日期为假期。我仍然不确定什么是处理这件事的最好方法。我很感激所有的信息。