Tag: nsfetchrequest

如何获取只是对象的ID,但也包括CoreData的行数据?

在后台工作的CoreData Apple Docs中 ,我遇到了一些build议: 例如,您可以configuration一个获取请求来返回对象ID, 但也包含行数据(并更新行caching) – 如果您只是将这些对象ID从后台线程传递到另一个线程。 我想知道如何实现这个获取请求? 具体如何更新行caching。 我认为这是如何得到只是ID: NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"MyItem"]; // iOS 5 method request.returnsObjectsAsFaults = YES; 我怎么做剩下的?

导入到CoreData时检查重复项

我使用RestKit将数据导入到Core Data存储中,并需要检查重复项。 如果商品已经在商店中,我想用最新的属性进行更新。 如果这是一个新的项目,我想创build它。 导入速度很慢,所以我使用了Instruments,并看到导入的最长部分是检查项目是否已经存在(具有获取请求) 所以我想知道如果检查是否该商品已经在商店中,是否更快: 使用countForFetchRequest来查看该项是否已经存在,然后executeFetchRequest返回要更新的项 只是executeFetchRequest获取项目更新 还是有更好的方法来做到这一点? 我认为countForFetchRequest会更快,因为整个NSManagedObject不返回,只有执行提取请求,如果我知道会有一个NSManagedObject。 谢谢 – (Product *)productWithId:(int)productID { NSManagedObjectContext *context = [Model sharedInstance].managedObjectContext; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"product_id == %d", productID]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; request.entity = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:context]; request.predicate = predicate; request.fetchLimit = 1; NSError *error = nil; NSUInteger count = [context countForFetchRequest:request error:&error]; […]

如何在Core Data中使用fetchRequest谓词

我将联系人标识符从联系人表视图控制器传递到另一个位置表视图控制器。 所以我定义了一个委托ContactSelectionDelegate,并在Location tableview控制器中实现了方法userSelectedContact,并获取contactIdentifierString 我正在search数据库以查找contactIdentifierString的匹配项,并查找另一个属性提供程序名称的值。 这涉及到search整个数据库。 是否有更快的方式分配一个谓词到上下文fetchRequest。 我认为这将是更快,更less的代码行。 有人可以build议如何使用联系fetchRequest谓词? ContactTableViewController代码: protocol ContactSelectionDelegate{ func userSelectedContact(contactIdentifier:NSString) } class ContactTableViewController: UITableViewController { var delegate:ContactSelectionDelegate? = nil override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if (delegate != nil){ let contactDict:NSDictionary = allContacts.object(at: indexPath.row) as! NSDictionary let identifier = contactDict.object(forKey: "uniqueId") delegate!.userSelectedContact(contactIdentifier: identifier as! NSString) self.navigationController!.popViewController(animated: true) } } […]

NSPredicate遍历关系(StackMob)

我一直在研究苹果的Predicate Programming Guide和SO,试图确定为某个获取请求编写谓词的正确方法。 这似乎是我试图用点符号来遍历一个关系的方式没有被请求所尊重。 NSEntityDescription *entity = [NSEntityDescription entityForName:@"Task" inManagedObjectContext:context]; [fetchRequest setEntity:entity]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"project.user == %@", self.user]; [fetchRequest setPredicate:predicate]; 用户,项目和任务都是映射到BaaS提供者(StackMob)的核心数据实体。 关系如下: 用户 一对多 项目 一对多 任务与您所期望的相反的关系。 我想要做的是获取当前login的用户的所有任务。 所以,我的想法是:发送与实体“任务”的获取请求。 如果拥有该任务的项目由login的用户拥有,则获取该任务并显示该任务。 很简单。 我想我应该可以在上面显示的谓词中使用点符号,但是获取请求返回nil。 有关获取请求的其他一切都很好。 如果我将格式string更改为@"project != NULL" ,则会将所有任务返回。 我只是写我的格式string不正确? 向StackMob发送提取请求时,点符号不知何故无效? 一如既往,任何帮助,非常感谢。 请让我知道是否需要更多的信息。 我现在有点太接近了,看清楚了。

NSPredicate,获得一个一对多关系的子集的结果

我没有解决与核心数据和NSFetchedResultsController 。 我的数据模型看起来像这样: 具有一对多关系的产品称为dataLines 。 dataLine实体有一个属性名称theWeek 。 我想获取dataLines.theWeek == someValue所有Product 。 这很容易通过子查询完成。 但是这将返回所有dataLines。 是否有可能创build一个NSPredicate返回Product和一个子集,如果dataLines只与dataLines == someValue ?

Core-Data executeFetchRequest在后台线程中冻结App

我有一个saveMOC的直接父母的mainMOC ,我需要在线获取另一个tmpMOC为了不阻止我的用户界面,同时从互联网上获取大量的logging。 我的应用程序冻结。 我可以缩小到这一点: fetchedItems = [tmpMOC executeFetchRequest:fetchRequest error:&error]; 我试图把这封装在dispatch_sync , [moc.parentcontext.parentcontext.persistentStoreCoordinator lock/unlock] , [whatevermoc performBlockAndWait] … 我也试图取出_mainMOC …没办法… 我明白, executeFetchRequest是不是线程安全的,所以,我怎么locking我需要locking,以确保我没有插入一个双? 任何人都可以帮忙? 更新(1) AppDelegate中的_saveMOC实例: – (NSManagedObjectContext *)managedObjectContext { if (_mainMOC != nil) { return _mainMOC; } if (_saveMOC == nil) { NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { _saveMOC = [[NSManagedObjectContext alloc] […]

用CoreData执行乘法(聚合):如何?

在Jeff Lamarche的一个奇妙的教程之后,我试图为NSManagedObject的特定子类聚合数据。 这是情况。 我创build了一个名为Product的类来扩展NSManagedObject类。 Product类有三个属性,如下所示: @property (nonatomic, retain) NSString* name; @property (nonatomic, retain) NSNumber* quantity; @property (nonatomic, retain) NSNumber* price; 我也创build了一个名为Product+Aggregate的类别,在这里我执行一个总和聚合。 特别是在Jeff教程之后,我pipe理了数量属性的总和。 +(NSNumber *)aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate inManagedObjectContext:(NSManagedObjectContext *)context { NSString* className = NSStringFromClass([self class]); NSExpression *ex = [NSExpression expressionForFunction:function arguments:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:attributeName]]]; NSExpressionDescription *ed = [[NSExpressionDescription alloc] init]; [ed setName:@"result"]; [ed setExpression:ex]; […]

通过NSManagedObjectSubclass上的Swift Computed属性对NSFetchedResultsController进行sorting

我正在使用Swift和Core Data构build一个应用程序。 在我的应用程序的一个点上,我想有一个UITableView显示当前在持久存储中的types的所有对象。 目前,我正在检索它们并使用NSFetchedResultsController在表格视图中显示它们。 我希望表视图按我的NSManagedObject子类的计算属性sorting,如下所示: class MHClub: NSManagedObject{ @NSManaged var name: String @NSManaged var shots: NSSet var averageDistance: Int{ get{ if shots.count > 0{ var total = 0 for shot in shots{ total += (shot as! MHShot).distance.integerValue } return total / shots.count } else{ return 0 } } } 在我的表视图控制器,我设置我fetchRequest如下: let request = NSFetchRequest(entityName: "MHClub") […]

NSPredicate'ALL或ANY操作符的左侧必须是NSArray或NSSet'

不完全确定为什么这不是现在的工作,我以为它以前一直工作。 有没有人看到这个FetchRequest构造的问题? – (NSArray *)entriesForDate:(NSDate *)date { NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Entry"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY addedOn.unique like %@", [T3Utility identifierForDate:date]]; request.predicate = predicate; NSError *error = nil; NSArray *matches = [self.database.managedObjectContext executeFetchRequest:request error:&error]; return matches; } 再次,我99%肯定,这个代码一直在工作,直到最近,所以即时通讯思考也许还有别的事情在我的代码在某处。 。 但是当我通过debugging器运行它时,这是挂起的地方。 这是我的错误: ALL或ANY操作符的左侧必须是NSArray或NSSet 有任何想法吗? 谢谢!

coredata – 获取一个属性到一个数组中

目标:我想从数据库(核心数据)中获取一个属性(从一个实体)的值到一个数组中。 例 实体名称=员工 属性= employeeID 我只想将所有employeeID填充到数组/集合中。 题 下面给出的是我的实现,我只是觉得它是一种方式,我想知道是否有更好的方法来做到这一点。 码 NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Employees"]; fetchRequest.resultType = NSDictionaryResultType; [fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"employeeID", nil]]; NSError *error = nil; NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; NSMutableArray *employeeIDs = [NSMutableArray array]; for(id currentRecord in results) { [employeeIDs addObject:[currentRecord objectForKey:@"employeeID"]]; }