Objective-C
iOS

pluckみたくNSArrayに入ってるNSManagedObjectから特定のプロパティの配列を作りたい時

More than 3 years have passed since last update.

普段Androidな開発友達から質問が来たので。

HogeをNSManagedObjectの派生クラスとします。

@interface Hoge : NSManagedObject
  NSNumber *hoge_id;
  NSNumber *name;
  NSNumber *status;
  Poyo *poyo;
@end

このnameだけの配列が欲しい時どうするか?
ずばりvalueForKeyPath:を使います。

- (NSArray *)namesByStatus:( NSInteger status ){
  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status = %d", status ];
  NSArray *records = [Hoge findAllByPredicate:predicate];

  return [records valueForKeyPath:@"name"]; // こんだけ
}

さらにHogeに入ったPoyoのnameも欲しい時は?

[records valueForKeyPath:@"poyo.name"]; // こんだけ

「.」で繋げると深いところも取ってこれます。

underscore.js/.phpでいうところのpluckとかそういうのですね。
単純すぎてググりにくいネタなので。

なぜこれで取ってこれるか知りたい人はKVC(Key-Value Coding)辺りを調べるといいかも。