Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 具有多个NSSortDescriptor的NSFetchedResultsController_Ios_Nsfetchedresultscontroller_Nssortdescriptor - Fatal编程技术网

Ios 具有多个NSSortDescriptor的NSFetchedResultsController

Ios 具有多个NSSortDescriptor的NSFetchedResultsController,ios,nsfetchedresultscontroller,nssortdescriptor,Ios,Nsfetchedresultscontroller,Nssortdescriptor,在我的应用程序中,我只使用一个NSSortDescriptor对一个实体进行排序,但现在我需要过滤4个不同属性的数据。这是当前排序的代码,结果是实体中的所有记录按属性“displayOrder”排序,但我需要按其他四个属性(年、月、日、组)筛选记录,所有这些属性都是整数32,但组是字符串: - (NSFetchedResultsController *)fetchedResultsController { if (fetchedResultsController) return fetche

在我的应用程序中,我只使用一个NSSortDescriptor对一个实体进行排序,但现在我需要过滤4个不同属性的数据。这是当前排序的代码,结果是实体中的所有记录按属性“displayOrder”排序,但我需要按其他四个属性(年、月、日、组)筛选记录,所有这些属性都是整数32,但组是字符串:

- (NSFetchedResultsController *)fetchedResultsController
{
  if (fetchedResultsController) return fetchedResultsController;

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

  [fetchRequest setEntity:entity];

  NSSortDescriptor *sortDescriptor = 
              [[NSSortDescriptor alloc] initWithKey:@"displayOrder" 
                                          ascending:YES];

  NSArray *sortDescriptors = [[NSArray alloc] 
                              initWithObjects:sortDescriptor, nil];  
  [fetchRequest setSortDescriptors:sortDescriptors];

  NSFetchedResultsController *aFetchedResultsController = 
              [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                                  managedObjectContext:managedObjectContext
                                                    sectionNameKeyPath:nil cacheName:@"ThingsCache"];
  aFetchedResultsController.delegate = self;
  [self setFetchedResultsController:aFetchedResultsController];

  [aFetchedResultsController release];
  [fetchRequest release];
  [sortDescriptor release];
  [sortDescriptors release];

  return fetchedResultsController;
}    

我尝试添加一个谓词:

NSNumber *yearSearched = 1965;
NSPredicate *yearPredicate = [NSPredicate predicateWithFormat:@"todoYear = %@", yearSearched];

[fetchRequest setPredicate:yearPredicate];
但运行应用程序后,在以下行出现错误:EXC_BAD_ACCESS
NSPredicate*yearPredicate=[NSPredicate predicateWithFormat:@“todoYear=%@”,yearSearched]


如果属性“todoYear”来自Integer32类型,则您的
NSNumber
创建错误(您只是将指针设置为整数)。应该是:

NSNumber *yearSearched = @1965;
NSPredicate *yearPredicate = [NSPredicate predicateWithFormat:@"todoYear = %@", yearSearched];

[fetchRequest setPredicate:yearPredicate];

你说的过滤是什么意思?谢谢你回复@Wain,我的意思是过滤符合某些条件的记录(year=x,month=y,day=z,group=@“Azul”)…所以你应该添加一个谓词,而不是另一个排序描述符。好的,我刚刚下载了Apple NSPredicate类参考PDF文件,我将设法找到一种方法来实现我的需求。不管怎样,谢谢。大家好,我已经包括了以下几行来检查它:NSNumber*yearSearched=1965;NSPredicate*yearPredicate=[NSPredicate predicateWithFormat:@“todoYear=%@”,yearSearched];[FetchRequestSetPredicate:yearPredicate];但运行应用程序后,在NSPredicate*yearPredicate=[NSPredicate predicateWithFormat:@“todoYear=%@”,yearSearched]行处出现错误EXC_BAD_ACCESS;[FetchRequestSetPredicate:yearPredicate];属性“todoYear”来自Integer32类型。再次感谢@WainThank@Wain,使用您最后的答案更新代码不会引发异常,但应用程序会继续显示所有行,而不是预期的行,在属性“todoYear”中只有一条记录的值为1965…您是否在FRC上调用过
performFetch:
?您通常会在返回新FRC之前调用它(创建它时)。我已使用完整的源代码更新了您的答案,因此您可以检查那里有什么问题。只需删除缓存名称。