2014-03-26 61 views
2

我需要预先填充我的核心数据库只有一个托管对象。预填充核心数据只有一个托管对象

目前我在AppDelegate中检查是否是最前一页时,该应用程序运行,然后添加对象,像这样:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

BOOL firstTime = [defaults boolForKey:@"firstTime"]; 

if (firstTime) { 
    [dataManager insertManagedObject:myManagedObect]; 

    [defaults setBool:NO forKey:@"firstTime"]; 
    [defaults synchronize]; 
} 

insertManagedObject方法检查managedObject已经在数据库。

它工作正常,但我担心在未来的应用程序更新这可能会导致我一些麻烦,主要是如果我更改我的数据模型,并添加一个新的数据模型版本。

这样做的最佳方法是什么?

+0

你想达到什么?你的问题并不清楚... –

+0

我只需要添加一个条目作为默认数据在我的模型。我做了像我上面展示的那样,但是我想知道这种方法是否会在未来的更新中产生麻烦,以及是否有更好的方法来实现这一点。 – douglasd3

+0

为什么不执行提取请求以查看商店是否已经包含该托管对象? e ..为该被管理对象设置一个特定的标识符... –

回答

1

为什么不执行提取请求,看商店已有 是否包含该托管对象? e.g设置 该管理对象的特定标识符...

按照我的意见,你可以只设立一个获取对你的实体要求,看看店里已经有一个实例吧。

这很容易实现。

如果您需要针对特定​​对象进行查询,您可以为您的实体设置属性标识符(即guid),并使用谓词来查看具有特定guid的对象是否存在。

如果你分享一些其他的细节,我可以给你其他的建议...

+0

我应该在我的应用程序委托didFinishLaunchingWithOptions中执行此获取请求吗? – douglasd3

+0

我不会发布一个单独的答案,因为@ flexaddicted的回答几乎总结了它。是的,只需在appdelegate中创建一个NSFetchRequest并检查对象是否存在。 – nsuinteger

+0

@ douglasd3是的,你可以。显然你需要首先设置核心数据堆栈。 –

相关问题