我读了很多关于核心数据..但什么是一个有效的方式来计数实体类型(如SQL可以做SELECT计数(1)...)。现在我只需要用NSFetchedResultsController
和NSArray
的计数来解决这个任务!我相信这不是最好的方法...可可核心数据有效的方法来统计实体
161
A
回答
285
我不知道是否使用NSFetchedResultsController是实现您的目标(但它可能是)最有效的方法。获得实体实例计数的显式代码如下:
// assuming NSManagedObjectContext *moc
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:moc]];
[request setIncludesSubentities:NO]; //Omit subentities. Default is YES (i.e. include subentities)
NSError *err;
NSUInteger count = [moc countForFetchRequest:request error:&err];
if(count == NSNotFound) {
//Handle error
}
[request release];
54
要清楚的是,您不计算实体,而是计算特定实体的实例。 (要实际计数实体,请向被管对象模型计算其实体的数量。)
要计算给定实体的所有实例而不提取所有数据,请使用-countForFetchRequest:
。
例如:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity: [NSEntityDescription entityForName: entityName inManagedObjectContext: context]];
NSError *error = nil;
NSUInteger count = [context countForFetchRequest: request error: &error];
[request release];
return count;
21
我只补充一点,以使其更加有效......因为它只是一个数,你并不真正需要的任何属性值,当然喜欢的一个上面的代码示例也不需要子实体。
所以,代码应该是这样的:
int entityCount = 0;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourEntity" inManagedObjectContext:_managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setIncludesPropertyValues:NO];
[fetchRequest setIncludesSubentities:NO];
NSError *error = nil;
NSUInteger count = [_managedObjectContext countForFetchRequest: fetchRequest error: &error];
if(error == nil){
entityCount = count;
}
希望它能帮助。
9
我相信最简单和最有效的计算对象的方法是将NSFetchRequest
结果类型设置为NSCountResultType
并使用NSManagedObjectContext countForFetchRequest:error:
方法执行它。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:entityName];
fetchRequest.resultType = NSCountResultType;
NSError *fetchError = nil;
NSUInteger itemsCount = [managedObjectContext countForFetchRequest:fetchRequest error:&fetchError];
if (itemsCount == NSNotFound) {
NSLog(@"Fetch error: %@", fetchError);
}
// use itemsCount
20
斯威夫特
这是相当容易获得核心数据实体的实例总数的计数:
let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "MyEntity")
let count = context.countForFetchRequest(fetchRequest, error: nil)
我在模拟器与400,000测试这对象数量和结果相当快(虽然不是即时的)。
0
如果你想找到计数特定前提取,我相信这是最好的办法:
NSError *err;
NSUInteger count = [context countForFetchRequest:fetch error:&err];
if(count > 0) {
NSLog(@"EXIST");
} else {
NSLog(@"NOT exist");
}
3
我写了斯威夫特3简单实用的方法来获取对象的个数。
static func fetchCountFor(entityName: String, predicate: NSPredicate, onMoc moc: NSManagedObjectContext) -> Int {
var count: Int = 0
moc.performAndWait {
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: entityName)
fetchRequest.predicate = predicate
fetchRequest.resultType = NSFetchRequestResultType.countResultType
do {
count = try moc.count(for: fetchRequest)
} catch {
//Assert or handle exception gracefully
}
}
return count
}
1
在斯威夫特3
static func getProductCount() -> Int {
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Product")
let count = try! moc.count(for: fetchRequest)
return count
}
相关问题
- 1. 可可核心数据 - 有效的相关实体计数
- 2. 核心数据实体的初始化方法不可用
- 3. 有没有简单的方法来清除旧的核心数据实体?
- 4. 可可:核心数据+ NSTableView
- 5. 与核心数据实体
- 6. 核心数据:获取所有实体
- 7. 无法获取来自核心数据的实体
- 8. 核心数据实体和关系的可视化
- 9. 添加一个新的记录编程到可可核心数据实体
- 10. 核心数据:的keyPath名在实体
- 11. 编辑核心数据中的实体
- 12. 核心数据willSave:方法
- 13. 可可 - 核心数据对象图
- 14. 核心数据;可可错误134100
- 15. 调试可可核心数据绑定
- 16. 可可核心数据 - 背景线程
- 17. 可可错误256核心数据
- 18. 在倒数计时器中使用核心数据实体
- 19. 使用核心数据增加实体计数(Twitter CS193p)
- 20. 用于实现核心数据实体的插入/编辑的最佳方法
- 21. “Swift核心数据”我可以使用多个实体而没有关系吗?
- 22. 核心数据实体命名约定
- 23. 核心数据[实体长度]:
- 24. UIManagedDocument - 验证核心数据实体
- 25. iPhone核心数据实体查找
- 26. 核心数据中间实体
- 27. 核心数据和图像实体
- 28. 核心数据 - 多个实体
- 29. IOS /核心数据:从实体
- 30. 核心数据实体未更新
豹要使用countForFetchRequest:不executeFetchRequest: – IlDan 2009-07-15 23:49:55
是的!谢谢。我会更新代码。 – 2009-07-16 00:23:23
然后跳过设置谓词。没有谓词:获得与实体描述匹配的所有对象 – IlDan 2009-07-16 00:42:46