通常,核心数据应用程序的sqlite存储文件位于
库>应用程序支持> iPhone模拟器> 7.1(或您使用的任何版本)>应用程序>(无论哪个文件夹包含您的应用程序)>文档
文件夹,但我在IOS 8中找不到它.我认为他们只会在iPhone模拟器文件夹中添加一个8.0文件夹,但它不存在.有没有人找到它?
我需要创建NSManagedObject实例,用它们做一些事情,然后将它们丢弃或存储到sqlite db.问题是,我无法创建NSManagedObject未连接的实例,NSManagedObjectContext这意味着在我决定不需要我的数据库中的某些对象后,我必须以某种方式清理.
为了解决这个问题,我使用相同的协调器创建了一个内存存储,并且我使用assignObject:toPersistentStore.Now 将临时对象放在那里,如何确保这些临时对象无法获取数据,我从中获取数据两个商店的上下文共同点?或者我是否必须为此类任务创建单独的上下文?
现在我正在考虑为内存存储创建单独的上下文.如何将对象从一个上下文移动到另一个上下文?只是使用[context insertObject:]?它在这个设置中可以正常工作吗?如果我从对象图中插入一个对象,整个图形是否也会插入到上下文中?
我的iPhone应用程序需要迁移其核心数据存储,而且一些数据库非常庞大.Apple的文档建议使用"多次传递"来迁移数据以减少内存使用.但是,文档非常有限,并没有很好地解释如何实际执行此操作.有人可以指出我一个好的例子,或者详细解释如何实际解决这个问题的过程吗?
嘿,我正在为我们的应用程序模型层工作.
一些要求是这样的:
我查看了关于构建服务器驱动的用户体验的WWDC10 Session 117,花了一些时间查看Objective Resource,Core Resource和RestfulCoreData框架.
Objective Resource框架本身不与Core Data对话,仅仅是一个REST客户端实现.Core Resource和RestfulCoreData都假设您在代码中与Core Data交谈,并且它们解决了模型层背景中的所有细节.
到目前为止所有看起来都没问题,最初我虽然核心资源或RestfulCoreData将涵盖所有上述要求,但是...有一些事情似乎没有一个正好解决:
当您调用- (BOOL)save:(NSError **)error托管对象上下文时,核心资源恰好向服务器发出所有请求,因此能够以某种方式向服务器提供正确的基础请求的NSError实例.但它会阻止调用线程,直到保存操作完成.失败.
RestfulCoreData保持您的-save:调用不变,并且不会为客户端线程引入任何额外的等待时间.它只是注意NSManagedObjectContextDidSaveNotification,然后在通知处理程序中向服务器发出相应的请求.但这种方式的-save:呼叫总是成功完成(当然,考虑到核心数据是好的,与保存的更改),并且实际调用它没有办法知道节省,可能也没有传播到因为一些服务器的客户端代码404或421或任何发生服务器端错误.甚至更多,本地存储变得更新数据,但服务器永远不知道更改.失败.
所以,我正在寻找可能的解决方案/常见做法来处理所有这些问题:
-save:在网络请求发生时阻塞每次调用.有任何想法吗?
我已经在Apple引用的示例代码中看到了如何处理Core Data错误.即:
NSError *error = nil;
if (![context save:&error]) {
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
*/
NSLog(@"Unresolved error %@, …Run Code Online (Sandbox Code Playgroud) 我有一个类型的属性,BOOL我想搜索此属性所在的所有托管对象YES.
对于字符串属性,它很简单.我创建一个这样的谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
Run Code Online (Sandbox Code Playgroud)
但是我该如何做,如果我有一个名为selected的bool属性,我想为此做一个谓词?我可以这样做吗?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
Run Code Online (Sandbox Code Playgroud)
或者我是否需要其他格式说明符并且只是通过YES?
CoreDataCoreData使用级联删除规则,实体"A"与条目"B" 的集合具有一对多的关系.
在iCloud环境中,当设备1显示"B"条目之一的详细视图时,设备2删除"A"条目.
当NSPersistentStoreDidImportUbiquitousContentChangesNotification在设备1中接收到通知时,其App Delegate调用mergeChangesFromContextDidSaveNotification然后广播内部通知,该内部通知由视图控制器捕获,显示条目"B"的细节(代码使用performBlock它应该的位置).
但是,尽管当详细视图控制器接收到内部通知时,条目"A"确实无效,但条目"B"仍然作为有效CoreData对象存在.似乎Cascade规则尚未完成其运作.因此,设备1中的视图控制器不知道删除,这可能导致意外的结果.
mergeChangesFromContextDidSaveNotification 当基础数据已合并但Cascade规则尚未完成时,似乎过早地返回.
我在通知到达时尝试刷新条目"B",同时暂时将stalenessInterval托管对象上下文设置为零,因此不会使用缓存对象,但我仍然从商店获得有效条目"B".
此时检查null条目"A"不是一个选项,因为情况比我在此描述的情况稍微复杂一些,并且空条目"A"在某些情况下可能有效.
我尝试在合并更改之后和将内部通知发送到视图控制器之前引入延迟.我发现2秒延迟没有帮助,但延迟10秒有效.
但我不想依赖这种延迟.这是一个没有太多数据的测试环境,我不知道在生产环境中会发生什么.依靠实验性延迟似乎不是正确的做法.
有没有正确的事情?或者我开始做错了什么?
这可能看起来很愚蠢,但我仍然无法弄清楚如何将属性标记为xcdatamodel文件中的主键.我的持久存储是sqlite文件.谁能帮我?
在这种情况下,我如何"验证"ID是唯一的?我应该写一个验证方法吗?
我需要对核心数据执行大量的导入任务.
假设我的核心数据模型如下所示:
Car
----
identifier
type
Run Code Online (Sandbox Code Playgroud)
我从我的服务器获取汽车信息JSON列表,然后我想将它与我的核心数据Car对象同步,这意味着:
如果它是一辆新车 - > Car从新信息创建一个新的Core Data 对象.
如果汽车已经存在 - >更新Core Data Car对象.
所以我想在后台进行导入,而不会阻止UI,而使用滚动显示所有汽车的汽车表视图.
目前我正在做这样的事情:
// create background context
NSManagedObjectContext *bgContext = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[bgContext setParentContext:self.mainContext];
[bgContext performBlock:^{
NSArray *newCarsInfo = [self fetchNewCarInfoFromServer];
// import the new data to Core Data...
// I'm trying to do an efficient import here,
// with few fetches as I can, and in batches
for (... num of batches ...) {
// do batch import... …Run Code Online (Sandbox Code Playgroud) 我需要将我的数组保存到Core Data.
let array = [8, 17.7, 18, 21, 0, 0, 34]
Run Code Online (Sandbox Code Playgroud)
该数组内的值和值的数量是可变的.
1.我在NSManagedObject类中声明什么?
class PBOStatistics: NSManagedObject, Equatable {
@NSManaged var date: NSDate
@NSManaged var average: NSNumber
@NSManaged var historicAverage: NSNumber
@NSManaged var total: NSNumber
@NSManaged var historicTotal: NSNumber
@NSManaged var ordersCount: NSNumber
@NSManaged var historicOrdersCount: NSNumber
@NSManaged var values: [Double] //is it ok?
@NSManaged var location: PBOLocation
}
Run Code Online (Sandbox Code Playgroud)
2.我在.xcdatamodel中声明了什么?

3.如何在我的实体中保存?(我使用MagicalRecord)
let statistics = (PBOStatistics.MR_createInContext(context) as! PBOStatistics)
statistics.values = [8, 17.7, 18, 21, 0, 0, 34] //is it enough?
Run Code Online (Sandbox Code Playgroud)