1

2 つのオブジェクトを含む配列があります。各オブジェクトには「タイプ」キーがあります。そのキーの値の 1 つは「resource」で、もう 1 つは「crop」です。

その配列を並べ替えて、必要なタイプのオブジェクトのみを含む新しい配列を作成したいと思います。私はこのコードがそれをしたと思った...

-(NSArray*)getItemsOfType:(NSString *) type
{
    NSSortDescriptor *sortDescriptor;
    sortDescriptor = [[NSSortDescriptor alloc] initWithKey:type
                                                 ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    NSArray *sortedArray;
    sortedArray = [templateObjects sortedArrayUsingDescriptors:sortDescriptors];

    return sortedArray;
}

しかし、それがしているように見えるのは、現在の配列を何らかの順序でソートするだけです。その機能を変更して必要なことを行うにはどうすればよいですか? 「initWithKey:ascending:selector:」を使用する必要がありますか?

アップデート

上記のコードの上にこのコードを試してみました...

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"templateObjects.type like %@", type];

    NSArray *newArray = [templateObjects filteredArrayUsingPredicate:predicate];

しかし、newArray が空のように見えるだけですか? @"templateObjects.type" の部分が間違っているような気がしますか?

更新 2

わかりました、このコードは私が必要とすることを行います..

-(NSArray*)getItemsOfType:(NSString *) type
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"type CONTAINS[cd] %@", type];

    NSArray *newArray = [templateObjects filteredArrayUsingPredicate:predicate];

    NSSortDescriptor *sortDescriptor;
    sortDescriptor = [[NSSortDescriptor alloc] initWithKey:type
                                                 ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    NSArray *sortedArray;
    sortedArray = [newArray sortedArrayUsingDescriptors:sortDescriptors];

    return sortedArray;
}
4

1 に答える 1

0

使用する

[NSPredicate predicateWithFormat: @"type like %@", type];

それ以外の

[NSPredicate predicateWithFormat: @"templateObjects.type like %@", type];

それで

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"type like %@", type];

また

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"type CONTAINS[cd] %@", type];

これは、両方のオブジェクトにタイプキーがあると言ったように機能します。

于 2012-11-25T05:48:31.380 に答える