Tim*_*Tim 75
您可以setFetchLimit:在NSFetchRequest上使用该方法来限制提取的记录数.所以如果你只想要第一条记录:
// Given some existing NSFetchRequest *request and NSManagedObjectContext *context:
[request setFetchLimit:1];
NSError *error;
NSArray *results = [context executeFetchRequest:request error:&error];Run Code Online (Sandbox Code Playgroud)
请注意,调用executeFetchRequest:error:仍将返回NSArray; 你仍然需要先从数组中拉出第一个对象才能使用它,即使它是一个大小为1的数组.
另一种效率较低的方法:根据您的商店类型,限制获取可能会产生显着的性能加速.但是,如果它没有,或者您并不担心性能,并且稍后可能会使用更多数据,则可以提前将第一个对象拉出阵列:
// Given some existing result NSArray *results:
NSManagedObject *firstManagedObject = [results firstObject];Run Code Online (Sandbox Code Playgroud)
如果您确定该数组中有一个对象,您甚至可以通过执行以下操作将其放入另一个数组(例如,在UITableViewController中使用):
// Again, with some NSArray *results:
NSArray *singleObjectResult = [results subarrayWithRange:NSMakeRange(0, 1)];Run Code Online (Sandbox Code Playgroud)
Cra*_*hon 13
当然,这部分取决于"第一条记录"的含义.您可能不仅需要将获取限制设置为1,还需要在获取中对结果进行排序.
例如,User我的数据库中有一堆对象,我想找到第一个创建帐户的人.(假设我已经有了模型User,包括一个名为的属性accountCreatedDate.)
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:managedObjectContext];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"accountCreatedDate" ascending:YES]; // ascending YES = start with earliest date
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = entity;
request.sortDescriptors = @[ sortDescriptor ];
request.fetchLimit = 1;
NSError *error;
NSArray *fetchResults = [managedObjectContext executeFetchRequest:request error:&error];
User *result = fetchResults.firstObject; // nil on failure; check value of 'error'
Run Code Online (Sandbox Code Playgroud)
如果在限制获取之前没有对结果进行排序,则无法确定将"首先"返回哪些结果.
| 归档时间: |
|
| 查看次数: |
25121 次 |
| 最近记录: |