Tag: nsfetchrequest

即使数据库已更新,NSFetchRequest也会返回旧数据

我正在使用Coredata的multithreading应用程序。 当我在一个线程上保存一些数据时,它会进入数据库,但是当数据保存到数据库后,当我试图从不同的线程获取数据时,获取请求将返回旧数据。 对于如何解决这个问题,有任何的build议吗?

核心数据提取请求的复杂sorting

我有一个NSEntity ( Cloth )的属性( type ),这是从预定义的NSString值列表,如雨披,夹克,大衣,礼服,顶部,西装等填充。 我想要获取所有布料logging,以便logging按照定义的type顺序进行sorting。 即雨披的所有logging在上面,然后是外套,然后是外套,然后是礼服,然后是上衣,然后是西装等等。 Poncho‎ … Poncho‎ … Poncho‎ … Jacket … Jacket … Coat … Coat … Coat … Gown … Gown … Top … Top … Top … Top … Suit … Suit … 这个顺序不是升序或降序,而是定制的。 如何获取Clothlogging,以便按照(定义的)顺序返回它们?

在Core Data实体中检索最后一行/对象作为string

我需要为我的调查问卷应用程序开发一个简单的login系统。 我有两个Entity – 一个用于存储调查问卷数据,称为NGLS ,存储客户详细信息,调查答案等,另一个称为Admin用户。 用户可以input他们的username保存到Admin实体。 然后,他们可以随意浏览调查问卷,每次完成的调查都会在每次调查后保存到NGLS实体中,如下所示: // Save managedObject NSError *error; [[self.managedObjectNGLS managedObjectContext] save:&error]; NSLog(@"%@", self.managedObjectNGLS); NSLog(@"Data saved"); 有一个exportbutton,它使用NSFetchRequest来检索存储在NGLS实体中的所有数据,并使用CHCSV Parser将该数据写入一个.csv,然后将其附加到电子邮件中。 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"NGLS" inManagedObjectContext:context]; [fetchRequest setEntity:entity]; NSError *error; NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; // CHCSVParser NSOutputStream *stream = [[NSOutputStream alloc]initToMemory]; CHCSVWriter *writer = [[CHCSVWriter alloc]initWithOutputStream:stream encoding:NSUTF8StringEncoding […]

NSFetchRequest核心数据Swift 3向后兼容

我已经转换我的代码在swift 3.我在我的应用程序中使用核心数据。 如您所知,NSFetchRequest已被更改。 在迅速2是: let request = NSFetchRequest(entityName: "UnsyncedTask") 在迅捷3: let request:NSFetchRequest<NSFetchRequestResult> = UnsyncedTask.fetchRequest() 我的问题是,它只支持ios 10.我怎样才能使其后向兼容? 我希望支持ios 9的NSFetchRequest,使用swift 3的ios 10。

是否有可能按“NSFetchRequest”中的子类进行sorting而不添加其他属性?

我想按实体NSFetchRequest的结果。 这些实体都共享相同的抽象父项。 例如: animal | |-cat | |-dog NSFetchRequest includesSubentities将TRUE和entity设置为animal的NSFetchRequest 。 可以将sectionNameKeyPath的entity.name设置为entity.name但由于sortDescriptors应用于存储的属性(即数据库中的数据,而不是方法),因此不可能对NSFetchRequest的sortDescriptors执行相同的操作类)。 因此按实体types分组的唯一方法是向超类添加一个属性,子类可以用来标识自己。 这看起来很疯狂,因为它破坏了inheritance的有用性。 我查看了SQLite数据库,实体types与属性存储在同一个表中,因此所需的数据已经就位。 总结:是否有可能通过NSFetchRequest的子类进行sorting而不添加其他属性?

NSFetchedResultsController尝试限制显示的logging数

当创build一个NSFetchedResultsController传递给我的NSFetchedResultsController时,我将fetchLimit属性设置为3。 现在最初这似乎工作正常。 我可以以任何方式修改前三个返回的对象,改变它们的顺序,并且全部重新正确。 当我改变一个最初落在前三个物体之外的物体时,会出现这个问题,现在将其引入前三个物体,或者只是添加一个新的物体,使其出现在前三个物体中。 我期望发生的事情:插入的物体将其余部分向下推,一个从底部落下。 究竟发生了什么:插入的对象将其余部分向下推, logging数增长到4 ?! 任何人都可以解释这个,或者我应该如何处理这个?

核心数据在内存中的NSExpressionDescription引发的exception

我使用这个NSExpressionDescription来获取属性date_modified的最大值: NSFetchRequest *dateModifiedFR = [[NSFetchRequest alloc] initWithEntityName:@"MyEntity"]; dateModifiedFR.resultType = NSDictionaryResultType; NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"date_modified"]; NSExpression *maxDateExpression = [NSExpression expressionForFunction:@"max:" arguments:@[keyPathExpression]]; NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init]; [expressionDescription setName:@"maxDate"]; [expressionDescription setExpression:maxDateExpression]; [expressionDescription setExpressionResultType:NSDateAttributeType]; dateModifiedFR.propertiesToFetch = @[expressionDescription]; NSError *error = nil; NSArray *resultDictionaries = [moc executeFetchRequest:dateModifiedFR error:&error]; NSDate *maxDate = [[resultDictionaries firstObject] valueForKey:@"maxDate"]; 只要我使用SQLite商店,这在iOS 7下工作正常。 但是现在我想用我的unit […]

setFetchBatchSize似乎不能正常工作

我就这个问题提出几个问题,但仍然无法实现。 我有一个核心数据,我在桌面视图中显示了10k行的人名。 我希望能够search和更新每个字母的表。 这是非常缓慢的。 正如我所build议的,我看WWWDC '10核心数据的演示,并试图实施 [request setFetchBatchSize:50]; 似乎没有工作。 当我使用仪器来检查核心数据时,仍然显示加载tableview时仍然有10k的请求,当我search它也得到所有的结果。 还有什么需要做的设置批量大小或那不会帮助我。 似乎工作的唯一的事情是设置fetchlimit为100当我search。 你认为它是一个很好的解决scheme吗? 提前致谢!

我如何使用NSManagedObject的新fetchRequest函数进行提取请求?

在iOS 10中,CoreData团队向NSManagedObject添加了一个新的“fetchRequest”方法。 它看起来像这样: public class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult> 据我所知,这使我们能够取代这一点: let request = NSFetchRequest<MyEntity>(entityName: "MyEntity") 有了这个: let request = MyEntity.fetchRequest() 但是,当我试图做出这样一个简单的请求: let request = MyEntity.fetchRequest() do { results = try request.execute() } catch let error { print("failed to fetch coffee object: \(error)") } 我收到以下错误: 错误域= NSCocoaErrorDomain代码= 134060“(空)”UserInfo = {消息=不能获取没有一个NSManagedObjectContext范围内} 所以,显然这个错误是说我需要把一个NSManagedObjectContext带入作用域。 我一直在寻找例子,但似乎find了如何使用新的APIfunction执行请求的完整示例。 题 使用最新的Core Data APIfunction,我如何进行简单的获取请求? […]

当两个单独的NSFetchRequests都完成时采取行动

我正在使用具有核心数据的远程数据库,当执行以下提取请求(取决于Internet连接)时,可能需要一些时间。 我想监视这两个请求,当它们完成时 – 无论成功还是失败 – 我想引发另一种方法。 FetchRequest 1: [self.managedObjectContext executeFetchRequest:fetchRequest1 onSuccess:^(NSArray *results) { //Succcess [self.refreshControl endRefreshing]; } onFailure:^(NSError *error) { [self.refreshControl endRefreshing]; }]; FetchRequest 2: [self.managedObjectContext executeFetchRequest:fetchRequest2 onSuccess:^(NSArray *results) { //Succcess [self.refreshControl endRefreshing]; } onFailure:^(NSError *error) { [self.refreshControl endRefreshing]; }]; 我想等到提取请求1和2都完成后再调用另一个方法。 我可以使用NSOperationQueue来监视这两个块吗? 如果不是的话,最好的方法是什么时候两个街区都已经完工?