我想看看一个对象是否在核心数据中持久化.例如,我在Core Data有朋友,我用名字来识别他们.我可以查询核心数据,看看是否知道"乔治".如果结果集数组包含超过零个对象,我知道George在那里.但核心数据会将整个过程加载到内存中,我实际上只想知道George是否被存储.

我该如何以最有效的方式完成?

推荐答案

设置核心数据请求,并执行以下操作,而不是实际发出查询:

NSError *error = nil;
NSUInteger count = [managedObjectContext countForFetchRequest:request
                                                        error:&error];
if (!error) {
    return count;
} else {
  return 0;
}

在实践中,方法countForFetchRequest:error:返回给定的获取请求如果被传递到executeFetchRequest:error:就会返回的对象数.


Edit:(由Regexident提供)

正如Josh Caswell正确 comments 的那样,处理错误的正确方法是:

if (count == NSNotFound) {
    NSLog(@"Error: %@", error);
    return 0;
}
return count;

或者这个(没有错误记录):

return (count != NSNotFound) ? count : 0;

Objective-c相关问答推荐

XCTAssertEqual 不适用于双精度值

UIRefreshControl iOS 6 xcode

自动布局和按下时隐藏底栏

使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件

XCTAssert 和 XCTAssertTrue 有什么区别?

从 Unix 时间戳创建 NSDate

在基于视图的 NSTableView 上更改 Select colored颜色

ios 13 - 带有 UISearchBar _searchField 的自定义 SearchBar 不起作用

何时使用静态字符串与 #define

在 iOS 中创建带有 URL 的 UIImage

在 iPhone 应用程序中使用 RestKit 的最佳方式

如何在 iOS 上将图像旋转 90 度?

无法加载 xcode 项目,因为它已从另一个项目或工作区打开

主队列上的 dispatch_sync 与 dispatch_async

IOHIDFamily 的神秘控制台错误

UITableViewCell 点击展开

IOS 6强制设备方向为横向

`[super viewDidLoad]` 约定

CMTime 秒输出

Objective C 消息分发机制