大佬教程收集整理的这篇文章主要介绍了ios – 具有任意排序的NSSortDescriptor,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想做这样的事情:
NSArray *sortAlgorithm = [NSArray arrayWithObjects:@"@",@"#",@"!",@"&",@"r",@"a",nil]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES comparator: ^(id obj1,id obj2) { NSComparisonResult comparisonResult; //Some code that uses sortAlgorithm. return comparisonResult; } ];
这将按键名对对象进行排序,以便以@开头的任何键,例如@home,会出现在以r开头的任何密钥之前,例如激进的,并且在任何以a开头的键之前再次出现,例如任何东西.
以上只是一个例子.关键是要完全任意排序.
这将用于NSFetchedResultsController.
代码// //使用sortAlgorithm的代码看起来像什么?
编辑:
围绕我尝试实现sortDescriptor的代码,如PR. occulus的建议:
- (NSFetchedResultsController *)fetchedResultsController { if (__fetchedResultsController) return __fetchedResultsController; NSFetchrequest *fetchrequest = [[NSFetchrequest alloc] init]; fetchrequest.entity = [NSEntityDescription entityForName:@"Tag" inManagedObjectCo@R_675_10443@t:self.temporarymanagedObjectCo@R_675_10443@t]; //NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO comparator:^(id obj1,id obj2) { NSArray *sortAlgorithm = [NSArray arrayWithObjects:@"#",@"@",@".",nil]; NSString *obj1FirstChar = [(NSString *)obj1 subStringToIndex:1]; NSString *obj2FirstChar = [(NSString *)obj2 subStringToIndex:1]; int idx1 = [sortAlgorithm indexOfObject:obj1FirstChar]; int idx2 = [sortAlgorithm indexOfObject:obj2FirstChar]; if ( idx1 < idx2 ) return NSorderedAscending; else if ( idx1 > idx2 ) return NSorderedDescending; else return NSorderedSame; }]; fetchrequest.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; fetchrequest.fetchBatchSize = 20; NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchrequest:fetchrequest managedObjectCo@R_675_10443@t:self.temporarymanagedObjectCo@R_675_10443@t sectionNameKeyPath:nil cachename:@"Tags"]; aFetchedResultsController.delegate = self; self.fetchedResultsController = aFetchedResultsController; [self.fetchedResultsController performFetch:nil]; return __fetchedResultsController; }
注释掉的sortDescriptor可以工作.
在实体“Tag”的对象上肯定有一个名为name的属性.但即使没有,这似乎也不是问题. Xcode似乎甚至没有编译那行代码(sortDescriptor),这听起来很荒谬.断点工作正常,但没有打破特定的代码行.
NSString *obj1FirstChar = [(NSString *)obj1 subStringToIndex:1]; NSString *obj2FirstChar = [(NSString *)obj2 subStringToIndex:1]; int idx1 = [sortAlgorithm indexOfObject:obj1FirstChar]; int idx2 = [sortAlgorithm indexOfObject:obj2FirstChar]; // NOTE: we haven't dealt with the case where one of the // chars wasn't found in the array of characters. A strategy // for this would need to be decided. if (idx1 == idx2) { return NSorderedSame; } if (idx1 < idx2) { return NSorderedAscending; } return NSorderedDescending;
未经测试,可能需要稍微调整一下.注意大/小写字符差异.
更新:使用自定义排序描述符和sql支持的核心数据存储似乎存在问题.有关详细信息,请参阅this question.
以上是大佬教程为你收集整理的ios – 具有任意排序的NSSortDescriptor全部内容,希望文章能够帮你解决ios – 具有任意排序的NSSortDescriptor所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。