2016-08-09 8 views
0

マイコアデータモデルには、ロケーションと写真の2つのエンティティがあります。コアデータ内のリレーションシップ数の検索 - Swift

ロケーションはlat、lonを格納しており、多くの写真が関連付けられています。 写真は画像をバイナリデータとして保存します。逆の関係も同様に設定されます。

特定の場所について、そのエンティティに現在関連付けられている写真があるかどうかをどのように確認できますか?

私は場所にNSManagedObjectクラスを使用していますが、すべての写真を検索することを考えましたが、それはむしろ非効率的だったようです。

class Location: NSManagedObject, MKAnnotation { 
    init (latitude: Double, longitude: Double, context: NSManagedObjectContext) { 

     if let ent = NSEntityDescription.entityForName("Location", inManagedObjectContext: context) { 
      super.init(entity: ent, insertIntoManagedObjectContext: context) 

      self.latitude = NSNumber(double: latitude) 
      self.longitude = NSNumber(double: longitude) 
     } 
     else { 
      fatalError("ERROR") 
     } 
    } 

    override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) { 
     super.init(entity: entity, insertIntoManagedObjectContext: context) 
    } 

    func photoCount(context: NSManagedObjectContext) ->Int { 
     let fetchRequest = NSFetchRequest(entityName: "Photo") 
     let predicate = NSPredicate(format: "location = %@", self) 

     fetchRequest.predicate = predicate 

     ??? Best Option ??? 

     return <COUNT OF PHOTOS FOR LOCATION> 
    } 
} 

答えて

1

あなたはこれを必要以上に難しくしています。 LocationからPhotoまでの関係があると言いますから、その関係の値を調べるだけです。 Locationが既にある場合、別のフェッチを行わずに関係を直接使用することができます。

あなたは

let location : Location = // assume this exists 

を持っており、Locationが対多の関係が実体Photophotosを呼び出した場合、あなたは

let count = location.photos?.count 
として写真のカウントを取得した場合
関連する問題