Tag: 核心数据

为什么核心数据模型URL(modelURL)返回为零?

当我创build一个由XCode创build的CoreDataModel的新项目时,一切都很好。 但是,我添加了一个核心模型文件到我的项目和“核心数据栈”代码。 代码正确调用,但是,模型的URL是零。 我试图检查该项目,无法确定模型文件是否没有正确添加或编译,或者只是找不到URL。 帮我debugging和解决。 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"]; modelUrl返回nil 。

在“GMT”时区在sqlite数据库中保存date

我正在使用Core-Data来存储date时间对象。 例如。 2015-07-28T07:16:52+0000这是GMT时区ISO格式的date。 但是当我在数据库中保存这个date NSString* dateString=@"2015-07-28T07:16:52+0000"; NSDateFormatter* dateTimeformatter=[[NSDateFormatter alloc] init]; [dateTimeformatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; [dateTimeformatter dateFromString:dateString]; 我在数据库中看到的结果date是2015-07-28 12:46:52 根据我的设备的时区在IST 我试图在dateFormatter中设置时区,但同样的响应 NSString* dateString=@"2015-07-28T07:16:52+0000"; NSDateFormatter* dateTimeformatter=[[NSDateFormatter alloc] init]; [dateTimeformatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; [dateTimeformatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; [dateTimeformatter dateFromString:dateString]; 即使将[NSDate date]直接保存在数据库中,它也会根据设备的时区保存转换的date。 为什么Core-data不考虑NSDateFormatter的时区? 任何人都可以告诉我如何可以将数据库中的dateGMT保存在数据库中,而不pipe我的设备的时区?

核心数据在后台encryption

这个问题不同于这里的问题,因为应用程序主要在后台。 我们的应用程序要求我们保持数据存储encryption。 我们目前的实现是使用SQLite使用SQLCipher。 计划将转移到核心数据。 我正在寻找一种解决scheme来保持数据encryption,同时仍然可以在后台访问,并且不会限制查询 – NSPredicates和迁移(模式更改)。 以下是我一直在研究的所有选项: NSFileProtectionComplete – 不允许在后台访问文件 encrypted-core-data – 这个库似乎保持最新。 但是,在查看已知问题列表后,我已经有了关于在生产中使用它的第二个想法。 有没有人最近使用这个? NSIncrementalStore – 这是苹果工程师build议我们遵循的方式。 encryption核心数据正在使用这种方法。 核心数据中可转换的属性 – 这个解决scheme是否可扩展用于更大的数据集? 有没有人有build议,符合所有的标准,可用于生产应用程序?

修改核心数据模型每次都需要新版本?

我一直在四处搜寻,让我明白,每当我改变我的实体的属性,我需要创build一个全新的模型的新版本? 我明白,SQLite数据库现在与我的数据模型不同步,但我不能只是删除SQL文件,并重新运行我的模拟器? 这是我一直在做的,但似乎并没有工作。

形成一个谓词来过滤date之间

说我有两个date: minDate:2012-08-29 12:22:17 +0000 maxDate:2011-12-01 18:14:38 +0000 我有一个叫做MBDate的核心数据对象,它有一个NSDate属性。 我想要得到所有MBDate的日子,包括在上述日子之间。 所以它应该忽略小时,秒和分钟,并且只需要在8/29 – 12/01之间的所有日子。 就像是: predicate = [NSPredicate predicateWithFormat:@"date < %@ AND date > %@", maxDate, minDate]; 但我不确定我会怎样告诉它无视时间和分钟,只看日子。 有任何想法吗?

RestKit对象映射:使用setObjectMapping的困难:forResourcePathPattern:withFetchRequestBlock

我的设置 以下所有工作正常: RKManagedObjectMapping* chanMapping = [RKManagedObjectMapping mappingForClass:[Channel class] inManagedObjectStore:objectStore]; chanMapping.primaryKeyAttribute = @"chanId"; [chanMapping mapKeyPathsToAttributes: @"id",@"chanId", @"name", @"chanName", nil]; [objectManager.mappingProvider setMapping:chanMapping forKeyPath:@"Channels.channel"]; 我可以打电话 [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/channels" delegate:self]; 我从服务器获取我的频道,他们在Core Data本地存储。 完善。 问题 不过,我现在不想让RestKit在下次执行GET时从Core Data存储中自动删除已从服务器上删除的通道。 我明白这是支持添加以下内容: [objectManager.mappingProvider setObjectMapping:chanMapping forResourcePathPattern:@"/channels" withFetchRequestBlock:^ (NSString *resourcePath) { return [Channel fetchRequest]; }]; 但是,只要服务器上有新的东西,所有的通道都会被删除。 我试过的东西 [已更新] 我已经使用下面的答案中的步骤进行了debugging。 它看起来好像映射不工作/没有被发现(即我没有正确关联的映射与资源path)。 在deleteCachedObjectsMissingFromResult , cachedObjects数组看起来不错,拥有上一次应该在那里的所有对象,但results数组是空的,这显然导致[results containsObject:object]总是NO ,所有的对象都被删除。 我是否需要更改某些资源path映射?

嵌套核心数据提取

我有一个核心数据数据库与多个实体。 有一个称为“人”的父实体有很多“朋友”,“朋友”有很多“活动”,“活动”有“types”(“types与”活动“有多对多的关系)。尝试实现是通过“Types”过滤所有的“Person”实体,用户将敲击“Type”,然后刷新我的表并过滤“Types”显示的“Person”与他们有关。 目前我想我必须使用复合谓词,但我完全相信如何去做。 到目前为止,我所做的所有事情都是通过遍历我的fetchedObjects来打印出我想要的值: NSArray *persons = self.fetchedResultsController.fetchedObjects; for (JIPerson *person in persons) { JIFriend *friend = person.friends.anyObject; JIActivity *activity = friend.activities.anyObject; JIType *type = activity.type; NSLog(@"%@", type.name); } 这将正确输出值,但我需要使用这些值筛选我的表。 我怎样才能做到这一点?

为什么nspredicate不工作

– (NSFetchedResultsController *)fetchedResultsController { if (_fetchedResultsController != nil) { return _fetchedResultsController; } NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"KeyRefEntity" inManagedObjectContext:self.managedObjectContext]; [fetchRequest setEntity:entity]; [fetchRequest setFetchBatchSize:20]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"time" ascending:NO]; NSArray *sortDescriptors = @[sortDescriptor]; [fetchRequest setSortDescriptors:sortDescriptors]; NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"time" cacheName:@"Master"]; aFetchedResultsController.delegate = self; self.fetchedResultsController = […]

将核心数据实体属性从ViewController A传递给B.

我有一个核心数据的小问题。 我会跳过代码,因为它工作正常。 我只需要知道在prepareForSeague方法里面做什么。 应用程序有2个视图 – ViewControllerA和TableViewControllerB。 在TableViewControllerB我已经设置了表格视图与自定义单元格的细胞标识符:customCell。 我按下buttonADD,它显示2行警报视图。 警报视图将2个属性添加到实体,这些属性显示在表格单元格中。 实体称为SOMEentity,而属性是名称(NSString)和值(也是NSString)。 视图控制器A有两个textFields:TextFieldA和TextFieldB,一个button计算和标签叫calculateLabel。 计算button只是从textFields添加值。 现在我想这样做 – 单击单元格将显示TextFieldA中的属性值。 我需要做些什么 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender; { if ([[segue identifier] isEqualToString:@"FromViewBToViewA"]) { } } 另外,我必须在ViewControllerA中的viewDidLoad方法内写入东西吗? 所有的string和标签都是非primefaces的,强大的属性。 谢谢!

coredata keypath nameOfMovie找不到实体<NSSQLEntity Theaters id = 3>

我有一个coredata项目,我试图做一个查询。 这是我的coredata模型: NSManagedObjectContext *moc = [self managedObjectContext]; NSEntityDescription *theaterDescription = [ NSEntityDescription entityForName:@"Theaters" inManagedObjectContext:moc]; NSPredicate *theaterPredicate = [NSPredicate predicateWithFormat:@"nameOfTheater like %@ AND nameOfMovie like %@",_theaterName,_movieOutlet.stringValue]; NSFetchRequest *theaterRequestTwo = [NSFetchRequest new]; theaterRequestTwo.entity = theaterDescription; theaterRequestTwo.predicate = theaterPredicate; NSError *error = nil; NSArray *theaterResults = [moc executeFetchRequest:theaterRequestTwo error:&error]; 但是我得到这个错误: keypath nameOfMovie not found in entity <NSSQLEntity Theaters […]