标签: nssortdescriptor

31
推荐指数
3
解决办法
8530
查看次数

像使用NSSortDescriptor的NSInteger一样对NSString值进行排序

我创建了一个排序描述符来排序来自我的服务器的plist响应.这适用于值为9的排序键.超过10个项目我看到突然结果,排序键按顺序排列= 1,10,11,2,3,4,5,6,7,8,9

NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sort" ascending:YES];
self.myList = [NSMutableArray arrayWithArray:[unsortedList sortedArrayUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]]];
Run Code Online (Sandbox Code Playgroud)

如何按正确的顺序排列1,2,3,4,5,6,7,8,9,10,11?

iphone cocoa-touch objective-c nssortdescriptor ios

28
推荐指数
5
解决办法
2万
查看次数

NSMutableArray排序 - 不区分大小写

NSMutableArray按如下方式排序:

    NSSortDescriptor *sortDescriptor;
    sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:str_key ascending:bool_asc_desc] autorelease];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    NSArray *sortedArray;
    sortedArray = [ads_printers_array sortedArrayUsingDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)

问题是这是区分大小写的,我想让它不区分大小写.我怎样才能做到这一点?我尝试阅读文档,发现这样的事情:

sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:str_key ascending:bool_asc_desc selector: @selector(caseInsensitiveCompare)] autorelease];
Run Code Online (Sandbox Code Playgroud)

但是,我不知道我应该在selector参数中添加什么.谢谢!

cocoa objective-c nssortdescriptor

23
推荐指数
1
解决办法
8077
查看次数

NSSortDescriptor在Swift中使用NSDate进行排序

我如何使用托管对象的date属性对NSFetchRequest进行排序.那么它创建一个日期按顺序排列的数组?

这是我到目前为止的代码......

    var request : NSFetchRequest = NSFetchRequest(entityName: "History");
    request.predicate = NSPredicate(format: "counts = %@", true)
    request.sortDescriptors = [???] <- What should I put here?
    var results : [NSManagedObject] = context.executeFetchRequest(request, error: nil) as [NSManagedObject]
Run Code Online (Sandbox Code Playgroud)

nssortdescriptor nsfetchrequest swift

16
推荐指数
1
解决办法
8027
查看次数

Swift Generics,Constraints和KeyPaths

我知道Swift中泛型的局限性以及它们存在的原因所以这不是关于编译器错误的问题.相反,我偶尔遇到的情况似乎应该可以通过可用资源的某种组合(即泛型,关联类型/协议等)来实现,但似乎无法找到解决方案.

在这个例子中,我试图为NSSortDescriptor提供一个Swift替换(只是为了好玩).当你只有一个描述符时它很完美,但是,正如通常使用NS版本一样,创建一个SortDescriptors数组以对多个键进行排序会很好.

这里的另一个试验是使用Swift KeyPaths.因为那些需要Value类型并且比较需要Comparable值,所以我很难找出在何处/如何定义类型以满足所有要求.

这可能吗?这是我提出的最接近的解决方案之一,但是,正如您在底部看到的那样,在构建阵列时它不足.

同样,我理解为什么这不起作用,但我很好奇是否有办法实现所需的功能.

struct Person {
    let name : String
    let age : Int

}
struct SortDescriptor<T, V:Comparable> {
    let keyPath: KeyPath<T,V>
    let ascending : Bool
    init(_ keyPath: KeyPath<T,V>, ascending:Bool = true) {
        self.keyPath = keyPath
        self.ascending = ascending
    }
    func compare(obj:T, other:T) -> Bool {
        let v1 = obj[keyPath: keyPath]
        let v2 = other[keyPath: keyPath]
        return ascending ? v1 < v2 : v2 < v1
    }
}

let jim = Person(name: "Jim", age: 30)
let bob …
Run Code Online (Sandbox Code Playgroud)

generics nssortdescriptor swift keypaths

14
推荐指数
1
解决办法
949
查看次数

CoreData对多对多关系进行排序

我正在编写一个iOS应用程序,它具有人员记录存储,并且需要显示以特定方式排序的列表.这些排序有可变数量,它们是动态生成的,但我希望它们存储在数据存储区中.执行此操作的SQL方法是使ListPositions表具有列表名称,人员表中的id和排序键.然后,为了显示特定列表,我可以选择具有给定名称的所有列表ListPosition,拉入引用的人员,并对排序键进行排序.尝试在CoreDatat中执行此操作,但是我遇到了问题.我试图使用如下架构来做到这一点:

Person:
    Name
    DOB
    etc... 
    positions -->> ListPosition

ListPosition:
    listName
    sortKey
    person --> Person
Run Code Online (Sandbox Code Playgroud)

然后,我可以使用NSPredicate获取给定列表中的所有人员 [NSPredicate predicateWithFormat:@"ANY positions.listName like %@", someList]; 这允许我针对大量人员动态添加列表.问题是我无法使用ListPosition的sortKey字段对Persons进行排序.NSSortDescriptor会做什么?如果无法对多对多关系的一个元素的属性进行获取,那么在coredata中获取多个动态排序的另一种方法是什么?我正在使用NSFetchedResultsController显示列表,因此我无法将这些列表放在内存中.我需要使用单个NSFetchRequest来完成它.

iphone cocoa-touch core-data nssortdescriptor ios

13
推荐指数
1
解决办法
5233
查看次数

如何建立辅助NSSortDescriptor排序键?

我已经通过我的排序键成功地对我拥有的数据进行了排序lastName,但我想知道如何排序lastName,然后依次排序firstName.这是我用来排序的代码lastName

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
Run Code Online (Sandbox Code Playgroud)

如何添加辅助排序键firstName

iphone objective-c nssortdescriptor ios xcode4.2

11
推荐指数
1
解决办法
8338
查看次数

在实体中找不到Keypath <transientproperty>

我想在表视图的节头中显示格式化日期.

我使用了以下代码.但它抛出异常*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath dateSectionIdentifier not found in entity <NSSQLEntity Expense id=1>'.

猜测添加排序描述符时会出现异常.

NSMutableArray *sortDescriptors = [[NSMutableArray alloc] initWithCapacity:20];
NSSortDescriptor *mainSortDescriptor = [[NSSortDescriptor alloc] initWithKey:dateSectionIdentifier ascending:NO];
[sortDescriptors addObject:mainSortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)

//Expense.h

NSString *dateSectionIdentifier;
Run Code Online (Sandbox Code Playgroud)

//Expense.m

@dynamic dateSectionIdentifier

-(NSString *)dateSectionIdentifier{
[self willAccessValueForKey:@"dateSectionIdentifier"];
NSString *tempDate = [self primitiveDateSectionIdentifier];
[self didAccessValueForKey:@"dateSectionIdentifier"];
if(!tempDate){
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"d MMMM yyyy"];
    tempDate = [dateFormatter stringFromDate:[self date]];
    [self setPrimitiveDateSectionIdentifier:tempDate];
    [dateFormatter release];
}
return tempDate;

}
Run Code Online (Sandbox Code Playgroud)

core-data objective-c nssortdescriptor ios

11
推荐指数
1
解决办法
5396
查看次数

使用sortedArrayUsingDescriptors和Key Paths排序

我有一个无序数组与以下类的实例:

@interface Place : NSObject {

}

@property (nonatomic, copy) NSString *country;
@property (nonatomic, copy) NSString *city;
@property (nonatomic, retain) NSURL   *imageURL;


-(id) initWithCountry: (NSString *) aCountry city: (NSString *) aCity imageUrl: (NSURL *) aUrl;


@end
Run Code Online (Sandbox Code Playgroud)

我正在尝试按国家和城市使用sortedArrayUsingDescriptors对其进行排序.NSSortDescriptor的文档说initWithKey的arg是一个关键路径.

但是,如果我尝试使用NSortDescriptor,例如:

NSSortDescriptor *country = [[[NSSortDescriptor alloc] initWithKey:@"country.city" ascending:YES]autorelease];
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

NSMutableSet *bag = [[[NSMutableSet alloc] init] autorelease];
[bag addObject:[[Place alloc] initWithCountry:@"USA" 
                                         city:@"Springfield" 
                                     imageUrl:[NSURL URLWithString:@"http://www.agbo.biz"]]];
[bag addObject:[[Place alloc] initWithCountry:@"Afghanistan" 
                                         city:@"Tora Bora" 
                                     imageUrl:[NSURL URLWithString:@"http://www.agbo.biz"]]];
[bag addObject:[[Place alloc] initWithCountry:@"USA" 
                                         city:@"Chicago" 
                                     imageUrl:[NSURL URLWithString:@"http://www.agbo.biz"]]];

[bag addObject:[[Place alloc] initWithCountry:@"USA" 
                                         city:@"Chicago" …
Run Code Online (Sandbox Code Playgroud)

sorting cocoa objective-c key-value-observing nssortdescriptor

10
推荐指数
1
解决办法
2万
查看次数

objective-C,对包含数字的字符串数组进行排序

让我们假设我有一个像这样的数组

NSArray* arr = @[@"1",@"4",@"2",@"8",@"11",@"10",@"14",@"9"]; //note: strings containing numbers
Run Code Online (Sandbox Code Playgroud)

我想这样排序:[1,2,4,8,9,10,11,14]

但是,如果我使用

[arr sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Run Code Online (Sandbox Code Playgroud)

我得到[1,10,11,14,2,4,8,9] ......如果我使用:

   NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"length" ascending:YES];
   NSArray *sortDescriptors = @[sortDescriptor];
   [arr sortedArrayUsingDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)

我得到这样的东西:[1,4,2,8,9,11,10,14]

我如何组合两个谓词?或者是解决这个问题的其他更简单的方法吗?注意:此数组的输出仅用于调试目的,我不在乎结果是否将数组转换为整数,只要我可以在控制台中使用NSLog打印谢谢

objective-c nsarray nssortdescriptor ios

10
推荐指数
2
解决办法
6737
查看次数