2017-10-26 18 views
0

CoreDataにDevicesというエンティティがあります。デバイスには以下の属性があります。 名前、モデル、メーカー、所有者。すべての属性は文字列型です。私は望ましい結果、このway.Butを取得しています述語コアデータエンティティから直接エンティティ属性を取得する

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Devices" inManagedObjectContext:self.managedObjectContext]; 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:entity]; 

request.fetchLimit = Device_LIMIT; 
NSSortDescriptor *sortDisc = [NSSortDescriptor sortDescriptorWithKey:@"model" ascending:YES]; 
[request setSortDescriptors:@[sortDisc]]; 
NSError *error; 
NSArray *array = [self.managedObjectContext executeFetchRequest:request error:&error]; 
if (array) { 

    arrName = [array valueForKey:@"Name"]; 
} 

return arrName; 

を使用してエンティティ・デバイスから値を取得するには、次のコードを使用しています、私の質問はどのように私は直接せずに、name属性のデバイスエンティティから配列を取得することができていますif-elseまたはforの条件を追加します。

+0

希望の結果は何ですか? –

+0

デバイスエンティティのName属性のすべての値。 – Prez

+0

'array'がDevices Entityのすべてのレコードを持っていることを確認しましたか? –

答えて

0

これらの値を取得するには、コアデータからアレイをフェッチする必要があります。これは、コアデータの動作方法です。 NSDictionaryResultTypeを使用するようにコードを変更することはできますが、管理対象オブジェクトの配列の代わりに辞書の配列を取得するだけです。あなたがやっていることは正解です。配列を取得せずに名前の値を取得し、その配列から名前を抽出することは簡単にできません。

+0

私の質問を本当に理解した唯一の人です。ありがとう、NSDictionaryResultTypeとsetPropertiesToFetchを使って試してみました。結果を得ました。しかし、これを使用した後に質問があります。つまり、別のエンティティがあると言うことができます。PersonとPersonには、3つの属性 - 仕事、経験、デバイスがあります。次に、carという名前の車と1対多の関係があり、setPropertiesToFetchとNSDictionaryResultTypeを使用して、 – Prez

0

としてarrNameに値を追加するためのループを実行します。フェッチ要求がエラーで失敗した場合はnil配列のみが返され

NSMutableArray *arrName = [NSMutableArray new]; 

for (NSManagedObject *object in array) { 
    [arrName addObject:object[@"Name"]]; 
} 
0

コードが配列されていない場合は、エラーに対処するように構成する必要があります。

EDIT:これは、何かを返し、ココアの引数としてエラーを取るほとんどのメソッドでは、かなり当てはまります。通常、何も返されない場合は、エラーをチェックする必要があります。

0

メソッドexecuteFetchRequestの戻り値はオブジェクト配列なので、forループを使用してname属性を取り出す必要があります。

+0

彼はすでに' for'ループなしで名前を取得しているので、ループは必要ありません。 –