Tag: nssortdescriptor

使用NSSortDescriptor将“nil”值保留在列表的底部

我正在sortingNSFetchedResultController数据。 我需要按名字sorting数据。 但是,有一些没有名字的条目。 我需要“无名”对象出现在列表的底部,而不是顶部。 使用当前的代码,当我按名sorting列表时,“无名”单元格放在顶部。 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Contacts"]; request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES]]; _FRC = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:MOC sectionNameKeyPath:nil cacheName:nil]; _FRC.delegate = self;

NSSortDescriptor与任意sorting

我无法将自己的头围绕如何使用NSSortDescriptor进行任意sorting。 我想要做这样的事情: 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; } ]; 这将通过键name对对象进行sorting,以便任何以@开始的键(例如@home )将出现在任何以r开头的键之前(例如radical ,并且再次以任何以a开头的键。 以上只是一个例子。 关键是要启用完全的任意sorting。 这将用于NSFetchedResultsController。 什么代码//使用sortAlgorithm的一些代码看起来像? 编辑: 代码围绕我尝试实现sortDescriptor,作为公关。 occulus'build议: – (NSFetchedResultsController *)fetchedResultsController { if (__fetchedResultsController) return __fetchedResultsController; […]

NSFetchedResultsController的transient属性的NSSortDescriptor

好吧,我最初想让NSSortDescriptor根据NSManagedObject子类中的属性对NSSortDescriptor进行sorting,但显然不会这样做,因为NSFetchedResultsController仅限于在取出的实体上工作的谓词和sorting描述符关系,所以我决定在我的数据模型中创build一个transient属性,将这个属性的属性合成到我的NSManagedObject子类中,然后根据它进行sorting。 运行时,我得到了执行获取'NSInvalidArgumentException', reason: 'keypath isActive not found in entity <NSSQLEntity SMSourceEntity id=2>' 我知道这是KVO问题,所以我添加了+ (NSSet*)keyPathsForValuesAffectingIsActive ,但仍然有同样的问题。 我做错了什么,或者我仍然错过了一些东西,使其find我的keypath? 谢谢。 码: @implementation SMSourceEntity @dynamic friendlyName; @dynamic interfaceAddress; @dynamic uniqueID; @dynamic network; @synthesize isActive = _isActive; + (NSSet*)keyPathsForValuesAffectingIsActive { return [NSSet setWithObject:@"isActive"]; } @end 我的sortDescriptor: request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"isActive" ascending:NO] , nil];

用自定义对象sortingNSArray

在我的Xcode项目中,我有以下类: 地址 @interface LDAddress : NSObject{ NSString *street; NSString *zip; NSString *city; float latitude; float longitude; } @property (nonatomic, retain) NSString *street; @property (nonatomic, retain) NSString *zip; @property (nonatomic, retain) NSString *city; @property (readwrite, assign, nonatomic) float latitude; @property (readwrite, assign, nonatomic) float longitude; @end 位置 @interface LDLocation : NSObject{ int locationId; NSString *name; LDAddress […]

如何build立二级NSSortDescriptorsorting键?

我已经成功地sorting我的sorting键我的lastName ,但我想知道如何按lastNamesorting,然后通过firstName 。 这里是我用lastNamesorting的代码 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES]; [request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 如何添加firstName的二级sorting键?

Objective-C,sorting包含数字的string数组

让我们假设我有一个这样的数组 NSArray* arr = @[@"1",@"4",@"2",@"8",@"11",@"10",@"14",@"9"]; //note: strings containing numbers 我想这样sorting:[1,2,4,8,9,10,11,14] 但如果我使用 [arr sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 我得到[1,10,11,14,2,4,8,9] …如果我使用: NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"length" ascending:YES]; NSArray *sortDescriptors = @[sortDescriptor]; [arr sortedArrayUsingDescriptors:sortDescriptors]; 我得到这样的东西:[1,4,2,8,9,11,10,14] 我怎样才能结合这两个谓词? 或者是解决这个问题的其他更简单的方法? 注意:这个数组的输出只是为了debugging目的,我不在乎如果结果将数组转换为整数,只要我可以在控制台与NSLog谢谢

NSSortDescriptor评估升序(Swift)

应用程序从json文件中以数字string的forms进入: let contentid: AnyObject! = jsonFeed["contentid"] let stream:Dictionary = [ "contentId": contentid as! String, ] 它后来被保存到[NSManagedObject]: var articles = [NSManagedObject]() let entity = NSEntityDescription.entityForName("Article", inManagedObjectContext: managedContext) let article = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext) article.setValue(stream["contentId"], forKey: "contentid") articles.append(article) 最后,我使用NSSortDescriptor让核心数据按照数值递增的顺序返回: let sort = NSSortDescriptor(key: "contentid", ascending: true) fetchRequest.sortDescriptors = [sort] 但条目6 – 10返回为: 10,6,7,8,9 。 使用NSSortDescriptor正确评估这些数字的正确方法是什么? 更新: […]

在iOS中对包含字母数字单词的数组进行sorting

我有一个名为产品的10个元素的数组默认sorting,这是当前日志。 for (int i=0;i<products.count; i++) { NSLog(@"%@",products[i]); } 输出: Product1 Product10 Product2 Product3 Product4 Product5 Product6 Product7 Product8 Product9 我需要按以下顺序sorting: Product1 Product2 Product3 Product4 Product5 Product6 Product7 Product8 Product9 Product10 我目前的方法是扫描出来的数字和sorting的基础上,我想知道是否有任何其他方式或默认方法在iOS中这样做,或者我应该坚持我目前的方法扫描每个元素中的数字然后sorting

NSSortDescriptor – 基于另一个数组sorting描述符

我有一个核心数据应用程序。 而我想获取一种对象, User 。 User拥有属性userId 。 我有另一个userId的数组, [1, 4, 3, 5] userId [1, 4, 3, 5] 。 我想创build一个NSSortDescriptor ,根据数组中userId的顺序对我的User对象进行sorting。 这是可能的,我该怎么做? 更新 我现在尝试了以下。 我添加了一个可变形的属性到我的用户对象,我存储用户ID数组。 我已经尝试了下面的sorting描述符: sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"userId" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) { NSUInteger idx1 = [self.user.followingIds indexOfObject:[obj1 valueForKey:@"userId"]]; NSUInteger idx2 = [self.user.followingIds indexOfObject:[obj2 valueForKey:@"userId"]]; return idx1 – idx2; }]; 我收到以下错误: Serious application […]

Keypath <transientproperty>在实体中找不到

我想在表格视图的部分标题中显示格式化的date.. 我使用下面的代码。但它抛出一个exception*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath dateSectionIdentifier not found in entity <NSSQLEntity Expense id=1>' 。 猜测添加sorting描述符时会发生exception。 NSMutableArray *sortDescriptors = [[NSMutableArray alloc] initWithCapacity:20]; NSSortDescriptor *mainSortDescriptor = [[NSSortDescriptor alloc] initWithKey:dateSectionIdentifier ascending:NO]; [sortDescriptors addObject:mainSortDescriptor]; [fetchRequest setSortDescriptors:sortDescriptors]; //Expense.h NSString *dateSectionIdentifier; //Expense.m @dynamic dateSectionIdentifier -(NSString *)dateSectionIdentifier{ [self willAccessValueForKey:@"dateSectionIdentifier"]; NSString *tempDate = [self primitiveDateSectionIdentifier]; [self didAccessValueForKey:@"dateSectionIdentifier"]; […]