3

配列内の値と一致する行を取得するために NSPredicate を記述する方法は? 例えば:

[NSPredicate predicateWithFormat:@"UserName IN %@",UserIDArray];

UserIDArrayユーザーの ID が含まれている場合、この配列の値と一致するユーザー名を取得するにはどうすればよいですか?

4

2 に答える 2

5

このアドバイスから始めましょう。コア データは SQL ではありません。エンティティはテーブルではありません。オブジェクトは行ではありません。列は属性/プロパティではありません。Core Data はオブジェクト グラフ管理システムであり、オブジェクト グラフを保持する場合と保持しない場合があり、バックグラウンドで SQL を使用する場合としない場合があります。Core Data を SQL 用語で考えようとすると、Core Data を完全に誤解してしまい、多くの悲しみと時間の浪費につながります。

Core Data はオブジェクトに基づいているため、フェッチを行うと、オブジェクトの配列が返されます。特定の値を見つけるには、それらのオブジェクトのそれぞれの属性の値を照会します。

次のエンティティがあるとします。

User{
    userName:string
    userID:string
}

...そして、 userID 文字列の配列に対応する userName を持つすべてのユーザーを見つけたいとします。NSFetchRequest を作成し、そのエンティティを「ユーザー」に設定します。次に、次のような述語を使用します。

[NSPredicate predicateWithFormat:@"userID IN %@",arrayOfUserIDs];

フェッチは、エンティティの属性名キーで構成された NSManagedObjects (またはサブクラス) の配列を返しますUser。配列内の各管理対象オブジェクトの属性の値を見つけるには、userName次のようにオブジェクトにその属性の値を要求します。

NSString *aUserName=[aUserEntityObject valueForKey:@"userName"];

SQL や類似のデータベース システムについて知っていることはすべて忘れてください。Core Data は真の意味でのデータベースではないため、そのような用語で考えようとすると混乱するだけです。Core Data はすべてオブジェクトに関するものです。

于 2011-04-04T20:43:16.980 に答える