Tag: 核心数据

为什么iOS在通过UIManagedDocument保存核心数据时延迟?

我正在使用核心数据在SQLite数据库中保存一些信息。 我正在用模拟器进行testing,并使用sqlite3来查询数据库,并validation我正在存储我所期望的。 我所看到的是数据不会出现在SQLite数据库中,直到我保存好15-20秒之后。 这里是我把我的保存下来的代码: NSEntityDescription *customerType = [NSEntityDescription entityForName:@"CustomerType" inManagedObjectContext:context]; CustomerType *ct = [[CustomerType alloc]initWithEntity:customerType insertIntoManagedObjectContext:context ]; ct.code = code; NSError* error = nil; if (![context save:&error] || error) NSLog(@"Saved new customer (error=%@)", [error debugDescription]); 保存操作完成而没有错误。 有什么提示,为什么我看到这个延迟? 我的保存操作是否运行不正常,或者延迟将数据保存在模拟器的工件中?

在CoreData中:+ entityForName:nil不是合法的NSManagedObjectContext参数search实体名称“XMPPUserCoreDataStorageObject

我对Core Data非常陌生,并且一直在尝试遵循许多教程,但是他们中的大多数都将所有的Core Data方法放到了AppDelegate.so中,任何一个人都可以帮助我 – (NSFetchedResultsController *)fetchedResultsController { // NSLog(@"Calling fetchedResultsController @ rootviewController"); if (is_Searching && [search_string length]) { NSManagedObjectContext *moc = [[AppDelegate appdelegate] managedObjectContext_roster]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"XMPPUserCoreDataStorageObject" inManagedObjectContext:moc]; NSSortDescriptor *sd1 = [[NSSortDescriptor alloc] initWithKey:@"sectionNum" ascending:YES]; NSSortDescriptor *sd2 = [[NSSortDescriptor alloc] initWithKey:@"displayName" ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObjects:sd1, sd2, nil]; NSFetchRequest *fetchRequest = [[NSFetchRequest […]

iOS 9和iOS 10 CoreData

我有一个关于Swift 3和Core Data的问题。 我正在用Xcode 8在Swift上开发一个应用程序,我需要支持iOS 9和iOS 10。 问题是,我不知道如何获得AppDelegate和上下文(用于存储和从我的实体获取数据)。 我认为我的代码应该是这样的: #if avaliable(iOS10,*) { // iOS 10 code } else { // iOS 9 code } 但我不知道该怎么做。 任何想法? (一个小的帮助在更正将不胜感激)

迁移大型Core Data数据库崩溃

我有一个将产品存储在核心数据文件中的应用程序。 这些pruducts包括图像作为“可变形”的数据。 现在我尝试使用Lightweight迁移来添加一些属性。 当我用一个小型的数据库进行testing的时候,它工作的很好,但是当我用了一个非常大的,有近500MB的应用程序时,通常会因为内存不足而崩溃。 有谁知道如何解决这个问题? 先谢谢了!

如何在UITableView的switch语句中创build一个variables?

我正在build立一个有三个部分的tableView。 我有前两个工作,但最后一个是有点抵抗。 我的问题似乎涉及到试图在switch语句中声明一个variables,实际上是一个嵌套的switch语句。 从我读过的这不是一个好主意,但在这种情况下,它似乎是唯一的select。 所讨论的部分dynamic地容纳与特定设备相关联的Alert对象的数量。 警报来自核心数据,并代替“date”和“警报消息”我想显示警报的信息。 我正在使用NSFetchRequest检索相关的警报。 这将返回按照我想要的方式sorting的Alert对象数组。 要在cellForRowAtIndexPath中显示正确的信息我一直在试图拉回正确的警报 Alert *alert = [allAlerts objectAtIndex:indexPath.row]; 看来我不允许在switch语句中声明一个variables。 任何想法如何能解决这个问题? 我将不得不在didSelectRowForIndexPath中做类似的事情,因为我需要在选中单元格时推送一个详细视图。 我已经尝试在switch语句之外声明variables,但是这不起作用,因为index.row可以要求在Alert中不存在的索引处的对象,并使程序崩溃。 有问题的代码在这个方法的底部: – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //Cell Identifiers static NSString *attributeCellIdentifier = @"attributeCellIdentifier"; static NSString *operatingInfoCellIdentifier = @"operatingInfoCellIdentifier"; static NSString *alertCellIdentifier = @"alertCellIdentifier"; //Create Attribute Cell If Required UITableViewCell *attributeCell = [tableView dequeueReusableCellWithIdentifier:attributeCellIdentifier]; if (attributeCell […]

在MagicalRecord中删除实体不是持久的

我有一个与MagicalRecord奇怪的问题。 删除将不会持续。 当我删除,NSFetchedResultsControllerDelegate正确地看到该对象已被删除。 但是,如果我closures并重新打开应用程序,该实体重新出现。 我用来删除实体的代码是: ActivityType *activityType = [_fetchedResultsController objectAtIndexPath:indexPath]; [activityType deleteInContext:[NSManagedObjectContext MR_defaultContext]]; [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; 我用来设置NSFetchedResultsController的代码是: NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"ActivityType" inManagedObjectContext:[NSManagedObjectContext defaultContext]]; [fetchRequest setEntity:entity]; NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext defaultContext] sectionNameKeyPath:nil cacheName:@"activityTypes"]; _fetchedResultsController = theFetchedResultsController; […]

RESTKit:在覆盖之前比较GET对象和本地持久化

核心数据中有一个保存的对象(保留)。 可以说下面是值: //Entity: employee objectID: 1111 firstName: @"Jon" lastName: @"D" modified: @"10:45PM" 现在,我执行一个RKManagedObjectRequestOperation *operation请求。 我设置了operation.savesToPersistentStore = NO; 并开始操作。 该对象被下载并被修改为以下内容: //Entity: employee objectID: 1111 firstName: @"Jonathan" lastName: @"Doe" modified: @"10:55PM" //I have 15 other properties that are either Strings, NSDate, NSNumber, and BOOLs 我相信在这个时候被修改的对象在managedObjectContext 如果Context的modifieddate不同,我想将Context每个attribute与核心数据中保留的attribute进行比较。 如果Context attribute与持久化attribute不同,我需要为每个属性属性触发一个标志。 一旦所有的属性都被窜改,我可以通过保存上下文来覆盖对象。 我想我必须手动检查: if (!([objectInCoreData valueForKey:@"firstName"] isEqualToString:[objectInContext valueForKey@"firstName"])) { firstNameValueChange […]

应用更新后CoreData崩溃

我有一个非常讨厌的问题。 我有一个“CoreData”应用程序,目前正在生产,一切工作正常。 我有一个应用程序的更新,但每当更新安装在原来的应用程序的应用程序崩溃在下面的代码行的权利。 [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error] 我收到的错误是“不能使用提取属性描述(实体模型不匹配)的提取请求”。 CoreData模型已经发生了变化,但是我为我的更改创build了一个新的模型版本,所以它应该将更改合并到新模型中。 这是我做了一百次的同样的过程,总是有效的。 除了这个时候。 我能想到的唯一区别可能会导致这个问题,我从CoreData模型中删除了一些旧的提取请求,但是再次在更新后的模型版本中完成,而不是原始模型。 你们都有什么想法可能导致这个? 正如我所提到的,我更新了CoreData模型版本,并将其选作我当前的应用程序模型。 另外,更新之后,只有在您第一次运行应用程序时才会发生崩溃。 发生崩溃后,我可以重新启动应用程序,一切工作正常。 谢谢! !**编辑**! 如果这有帮助,这是我的调用堆栈。 Last Exception Backtrace: 0 CoreFoundation 0x32ac029e __exceptionPreprocess + 158 1 libobjc.A.dylib 0x3a95697a objc_exception_throw + 26 2 CoreFoundation 0x32ac01c0 +[NSException raise:format:] + 100 3 CoreData 0x328a2678 -[NSFetchedPropertyDescription setFetchRequest:] + 164 4 CoreData 0x328a2788 -[NSFetchedPropertyDescription _createCachesAndOptimizeState] […]

什么时候用CoreData在iOS中明确保存?

我目前正在为iPaddevise一个简单的CoreData应用程序,而且我不确定什么时候必须明确保存。 我知道有自动保存; 不过,我觉得我需要明确地保存,以确保我的程序不会崩溃。 以下是该计划的简要概述: 〜这是一个表单程序,向用户显示一组文本字段和分段控件来填写。 (想想一个人填写一个调查,或回答关于他们的名字,年龄等问题)。 〜可以填写任意数量的这些字段。 没有一个是强制性的。 〜用户可以随时保存和加载表单,并可以一次保存多种不同的表单。 他们可以删除他们保存的文件 〜我目前正在使用核心数据存储这些数据,其中一个实体对象表示一个表单。 该实体对象包含用户已经完成的所有字段以及对每个字段的响应的列表。 〜我也有这个实体对象的NSManagedObject子类。 因此,每填写一个字段,我都会执行诸如currentForm.name = textfield.text 。 好吧,所以我的问题是,我什么时候必须明确保存? 如果我写代码,如currentForm.name = textfield.text核心数据执行立即保存或我必须明确告诉它这样做(假设我不想等待自动保存)? 有没有其他的时候我可能需要保存? 删除存储的文档后,我必须保存吗? 谢谢!

Swift dynamicCast错误,同时插入新的对象到数据库

我有一个字典,我有我想要插入到数据库中的所有数据作为新的对象。 问题是当我尝试抛出新创build的对象,它使我例外: libswift_stdlib_core.dylib`swift_dynamicCast: 汇编代码的一部分。 我使用的代码是这样的: var group:Group if (array.count == 0) { group = NSEntityDescription.insertNewObjectForEntityForName("Group", inManagedObjectContext:appDelegate.managedObjectContext) as Group } 而Group类的结构是这样的: @objc(Group) class Group:NSManagedObject{ @NSManaged var createDate:NSString @NSManaged var groupPictureUrl:NSString @NSManaged var groupTypeId:NSString @NSManaged var isDepartment:NSString @NSManaged var lastMessageRead:NSString @NSManaged var name:NSString @NSManaged var unreadMessageCount:NSString @NSManaged var groupId:NSString @NSManaged var lastSync:NSString } 我也有一个名为AppData的NSManagedObject的子类,它具有与Group类相同的结构。 而在插入我的代码的一部分,如果我用AppDatareplaceGroup它的作品,我可以插入到AppData表。 正如我之前所说,除了参数外,它们具有相同的结构。 但是当我尝试插入Group对象时,它给了我dynamic的强制转换exception。 […]