11

この例は不自然ですが、私の要点を示しています。

したがって、次のようなオブジェクト グラフがあるとします。

{
sex = male;
uid = 637650940;
work = ({
    employer = {
        id = 116420715044499;
        name = "Software Engineer";
    };
    "end_date" = "0000-00";
    "start_date" = "0000-00";
}, {
    employer = {
        id = 188733137832278;
        name = "Apple";
    };
});
},
//Some more objects

(これは、NSArray タイプのオブジェクトを持つ NSDictionary を含む NSArray です)。

キー フィールドはwork. work配列の最初のオブジェクトを取るキー パスが必要です。

私がこれを行う場合:

NSArray* work = [outerArrayObject objectForKey: @"work"];
id name = [work valueForKeyPath: @"employer.name"];

それぞれの名前を含む配列を取得します (上記の場合、Software Engineer & Apple)。最初のオブジェクトを返すコレクション演算子または何かがありますか? 各作品を start_date でソートするキー パスを作成できる場合のボーナス ポイントも :)

4

2 に答える 2

17

私自身の質問に答えるために、それを行う1つの方法は次のとおりです。

1) 次のカテゴリを定義します

@implementation NSArray (CustomKVOOperators)

- (id) _firstForKeyPath: (NSString*) keyPath {
    NSArray* array = [self valueForKeyPath: keyPath];
    if( [array respondsToSelector: @selector(objectAtIndex:)] &&
        [array respondsToSelector: @selector(count)]) {
        if( [array count] )
            return [array objectAtIndex: 0];
        else
            return nil;
    }
    else {
        return nil;
    }
}

@end

2) この KeyPath 構文を使用します

NSArray* work = [outerArrayObject objectForKey: @"work"];
id name = [work valueForKeyPath: @"@first.employer.name"];

この賢い人のおかげです。

于 2012-08-21T12:42:16.763 に答える