标签: nsfetchrequest

核心数据和分页

我有一个包含50,000条记录的数据库.我正在使用核心数据来从搜索中获取记录.搜索可以轻松返回1000条记录.使用核心数据和uitableview来浏览这些记录需要什么?我希望一次显示100条记录,并在查看100条记录后"加载更多"按钮.

core-data nsfetchrequest

4
推荐指数
1
解决办法
1670
查看次数

- [NSCFNumber count]:无法识别的选择器

我有一些核心数据代码精确地遵循Apple的示例代码(获取满足给定函数示例的获取属性值).我正在使用它来获取字段的最大值,所以当我插入该实体类型的下一个对象时,我可以增加它.

我无法让代码工作,直到我将Store Type切换NSXMLStoreTypeNSSQLiteStoreType,然后突然间一切似乎都在工作.但事实并非如此.我注意到它总会返回相同的值,即使我插入了较高的对象.但是,在我退出并重新打开(因此数据被持久化并重新读入)之后,它将使用新插入进行更新.

所以我在每次插入后开始提交和保存.在第一次"自动保存"之后,我得到以下错误(连续两次):

- [NSCFNumber count]:无法识别的选择器发送到实例0x100506a20

当我执行一次获取请求时,会发生这种情况(一行两次):

NSArray *objects = [context executeFetchRequest:request error:&error];
Run Code Online (Sandbox Code Playgroud)

更新

我通过Zombies工具运行我的代码,并且能够查看出现错误的对象.运行malloc以分配它的调用是:-[NSUserDefaults(NSUserDefaults) initWithUser:].由于我没有设置任何自己的默认值,我不知道这可能是什么对象.

更新2

我搜索了所有代码中的"发布",并注释掉静态分析器没有抱怨的每一个releaseautorelease那个.我仍然有错误.我甚至竟然在我的代码中注释掉每一个release/ autorelease仍然得到它.现在我很确定我自己的代码不会过度释放.

更新3

这篇文章似乎有同样的问题,但他的解决方案没有意义.他将结果类型从更改NSDictionaryResultTypeNSManagedObjectResultType,这会产生不正确的结果.而不是返回单个值(max我正在寻找的那个),它返回托管对象上下文中我的实体类的每个对象.

以下是堆栈跟踪的最顶层(当我第一次在异常时中断):

#0  0x7fff802e00da in objc_exception_throw
#1  0x7fff837d6110 in -[NSObject(NSObject) doesNotRecognizeSelector:]
#2  0x7fff8374e91f in ___forwarding___
#3  0x7fff8374aa68 in __forwarding_prep_0___
#4  0x7fff801ef636 in +[_NSPredicateUtilities max:]
#5  0x7fff800d4a22 in -[NSFunctionExpression expressionValueWithObject:context:]
#6  0x7fff865f2e21 …
Run Code Online (Sandbox Code Playgroud)

macos cocoa core-data objective-c nsfetchrequest

4
推荐指数
1
解决办法
4544
查看次数

"全字"通过NSPredicate在NSString中搜索

我想搜索属性description(NSString实例)中是否有给定的单词.

我试过这个谓词:

[NSPredicate predicateWithFormat:@"description CONTAINS[cd] %@", theWord];
Run Code Online (Sandbox Code Playgroud)

它有效,但它也找到了子词.

例如,给定theWord:

汽车

它也将是这个description:

圣诞颂歌

相反,我希望我的谓词只匹配a,或者christmas,或者carol.

(我正在使用Core Data和NSFetchRequest.)

cocoa-touch core-data nsstring nspredicate nsfetchrequest

4
推荐指数
1
解决办法
1766
查看次数

如何获取对象ID,还包括CoreData中的行数据?

在后台工作的CoreData Apple Docs中,我遇到了一些建议:

例如,您可以将获取请求配置为仅返回对象ID,但也包括行数据(并更新行缓存) - 如果您要将这些对象ID从后台线程传递到另一个线程,这可能很有用.

我想知道你如何实现这个获取请求?具体如何更新行缓存.

认为这就是获取ID的方式:

NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"MyItem"]; // iOS 5 method
request.returnsObjectsAsFaults = YES; 
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

iphone core-data objective-c nsfetchrequest ios

4
推荐指数
2
解决办法
5369
查看次数

对于使用Core Data的几个不同的提取重用NSFetchRequest有什么不好吗?

我的问题:重复NSFetchRequest使用Core Data进行多次不同的提取有什么不好吗?

示例代码:

NSFetchRequest *request = [[NSFetchRequest alloc] init];

NSEntityDescription *logEntity = [NSEntityDescription entityForName:@"LogEntry" inManagedObjectContext:context];
[request setEntity:logEntity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateTimeAction" ascending:NO]; // ascending NO = start with latest date
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status == %@",@"op tijd"];
[request setPredicate:predicate];
[request setFetchLimit:50];

NSError *error = nil;
NSInteger onTimeCount = [context countForFetchRequest:request error:&error];

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"status == %@",@"uitgesteld"];
[request setPredicate:predicate1];
[request setFetchLimit:50];

NSInteger postponedCount = [context countForFetchRequest:request error:&error];

NSPredicate *predicate2 = [NSPredicate …
Run Code Online (Sandbox Code Playgroud)

xcode core-data nspredicate nsfetchrequest

4
推荐指数
1
解决办法
1849
查看次数

通过对象ID选择核心数据的NSPredicate(并可能进行求和)

我正在找到核心数据的高级部分.我知道它不是SQL,但是有一些限制,但是,如何将下面的代码转换为NSPredicate以应用于获取请求?

Product* p = self.product; //this is a managed object
double vol=0;
for (PlanningItem* pi in self.planitems) {
 if (pi.product==p)
    vol+=pi.volume;
Run Code Online (Sandbox Code Playgroud)
  1. 我想获取所有将p作为其产品的计划项目.
  2. 接下来我想总结那一组的所有卷.

如何在NSPredicate的获取请求中执行1操作?我可以同时做2吗?

我要求NSPredicate的字符串.我自己能够建立Fetchrequest.

TX!

core-data nspredicate nsfetchrequest ios

4
推荐指数
1
解决办法
3433
查看次数

我们如何使用NSPredicate搜索所有记录而不是设置fetchController nil?

UITableView通过使用以下方式轻松显示所有记录:

if (_fetchedResultsController != nil) {
    return _fetchedResultsController;
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"Memo" inManagedObjectContext:[appDelegate managedObjectContext]];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                          initWithKey:@"memodate" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:[appDelegate managedObjectContext] sectionNameKeyPath:nil
                                               cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;

return _fetchedResultsController;
Run Code Online (Sandbox Code Playgroud)

对于搜索记录,我正在执行此操作:

- (void)searchBar:(UISearchBar *)aSearchBar textDidChange:(NSString *)searchText {

if (self.searchBar.text ==nil || [self.searchBar.text isEqualToString:@""])
{
    self.fetchedResultsController=nil;
}
else
{
    NSPredicate *predicate =[NSPredicate predicateWithFormat:@"memodesc CONTAINS[cd] %@", self.searchBar.text];
    [_fetchedResultsController.fetchRequest setPredicate:predicate];

}

NSError …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c nspredicate nsfetchedresultscontroller nsfetchrequest

4
推荐指数
3
解决办法
6170
查看次数

核心数据按升序获取最后20条记录?

在我的应用程序中我有一些记录core data,我想按升序获取最后20条记录,即.如果有30条记录,我想按升序从11到30获取记录 -

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"Messages" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];
    [fetchRequest setFetchLimit:20];
    NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                              initWithKey:@"messageId" ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"((userId == %@) && (frndId == %@) )",uid, fid];
    [fetchRequest setPredicate:predicate];

    NSError *error;
    NSArray* dataArray = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
    for (Messages* msg in dataArray) {
//code here
} 
Run Code Online (Sandbox Code Playgroud)

但它按升序给我前20条记录,如果我改为

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                                  initWithKey:@"messageId" ascending:NO];
Run Code Online (Sandbox Code Playgroud)

然后我有最后20条记录,但是按升序排列?任何建议都会受到赞赏.

core-data objective-c nsfetchrequest ios

4
推荐指数
1
解决办法
3947
查看次数

Swift核心数据 - 请求具有不同的结果

我如何在swift中使用不同的值调用es请求?

这是我的代码:

let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context: NSManagedObjectContext = appDelegate.managedObjectContext

    let request = NSFetchRequest(entityName: "MedicalData")
    request.propertiesToFetch = NSArray(object: "docID")
    request.returnsObjectsAsFaults = false
    request.returnsDistinctResults = true

    var results:NSArray = context.executeFetchRequest(request, error: nil)

    for data in results {
        var thisData = data as MedicalData
        println(thisData.docID)
    }
Run Code Online (Sandbox Code Playgroud)

我想获得"docID"的不同值,但我获得了所有实体:(

谢谢你的帮助!

sqlite core-data objective-c nsfetchrequest swift

4
推荐指数
2
解决办法
8025
查看次数

NSFetchRequest核心数据Swift 3向后兼容性

我已经在swift 3中转换了我的代码.我在我的应用程序中使用核心数据.如您所知,NSFetchRequest已更改.在swift 2中它是:

let request = NSFetchRequest(entityName: "UnsyncedTask")
Run Code Online (Sandbox Code Playgroud)

在快速3:

let request:NSFetchRequest<NSFetchRequestResult> = UnsyncedTask.fetchRequest()
Run Code Online (Sandbox Code Playgroud)

我的问题是,它只支持ios 10.如何才能使ios兼容?我想要支持ios 9的NSFetchRequest,带有swift 3的ios 10.

core-data nsfetchrequest ios swift3 ios10

4
推荐指数
1
解决办法
8687
查看次数