2010-12-28 5 views
1

私はCoreDataを初めて使用していて、すべての本とサンプルを探していますが、実際にどのようにするか教えてくれないので、CoreData One to Manyリレーションシップの1つの属性を編集します。

基本的には、1対多の関係に2つのエンティティがあります。

関係やエンティティ[他の関係は、この場合には重要ではありません]:今

enter image description here

私が得ることができるすべての

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
request.entity = [NSEntityDescription entityForName:@"MedicalCondition" inManagedObjectContext:delegate.managedObjectContext]; 
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"condition" ascending:YES]]; 
request.predicate = [NSPredicate predicateWithFormat:@"MedicalToProfile = %@", myProfile]; 
//request.fetchBatchSize = 20; 

NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] 
            initWithFetchRequest:request 
            managedObjectContext:delegate.managedObjectContext 
            sectionNameKeyPath:nil 
            cacheName:nil]; 

NSError *error; 
BOOL success = [frc performFetch:&error]; 
NSArray *fetchedObjectsFromCore; 
[request release]; 
if (success) { 
    fetchedObjectsFromCore = [frc fetchedObjects]; 
} 

NSFetchRequest

を使用して、指定されたプロファイル・エンティティに基づいてMedicalConditionエンティティこれで結構です。問題は、ある特定のエントリを更新したいときに発生します。私はそれを行う方法がわかりません。私はもっ​​とうまくMedicalConditionオブジェクトを追加することができます。しかし、それは編集になると、私は確信していません。

私が考えることができない唯一の方法は、エンティティに「ID」属性を持たせることです。私はこれ以上の解決策が必要だと思います。助けてください !ありがとうございます。

答えて

1

Thanku again Anurag。 私はそれが働いているkindna。

これは私がそれを

NSSet *newMedical = myProfile.ProfileToMedical; 
NSMutableArray *arrayMedical = [NSMutableArray arrayWithArray:[newMedical allObjects]]; 

MedicalCondition *c = [arrayMedical objectAtIndex:1]; 
c.condition = @"Amazing"; 

をどうやったのかと私はNSSetの更新状態を示しているリターン

NSSet *details = myProfile.ProfileToMedical; 

NSMutableArray *arrayDetail = [NSMutableArray arrayWithArray:[details allObjects]]; 

再び呼び出すとき、それが今の場所:)

を更新しかし、他の指数になる。 myProfile.ProfileToMedicalがソートされていないためです一貫性を確保するために、属性を表示/編集する前に必ず配列を並べ替える必要があります。

ありがとうもう一度

+0

はい、注文が重要な場合は、NSSetとして直接アクセスしないでください。フェッチ要求を作成します。フェッチ要求はソート基準を定義します。 – Anurag

2

有効なコンテキストからのCore Dataオブジェクトがある場合は、編集が非常に簡単です。オブジェクトデータを変更し、そのコンテキストを保存します。何とか手をつけたMedicalConditionオブジェクトがあるとします。あなたが与えられたProfileオブジェクトを持っている場合

MedicalCondition *condition; 
// modify a field 
condition.date = [NSDate date]; 

// save 
NSError *error; 
[managedObjectContext save:&error]; 

また、あなたが順序を気にしない限り、フェッチを実行することなく、直接、関連するすべてのMedicalConditionオブジェクトを取得することができます。

Profile *someonesProfile = ...; 
someonesProfile.conditions 

// and access a profile from a given MedicalCondition since 
// it seems to be a bi-directional relationship. 

MedicalCondition *someCondition = ...; 
someCondition.profile.dateofbirth; 

あなたは多分使用し、代わりにProfileToMedicalの、例えば代わり​​にMedicalToProfileProfileToMedicationなどの関係をより意味のある名前を付ける必要があります。

意味的に進歩して、そしてより良い読み
medicalConditions 

コード:

someonesProfile.medicalConditions 
+0

ありがとうございます、 –

+0

あなたは大歓迎です。これが参考になることを願っています。ご質問がある場合はお知らせください。 – Anurag

+0

名前をつけて申し訳ありませんが、この問題を修正するとすぐに更新します。私はまだmedicalConditionの1つのエントリを更新することができません。適切なMedicalCondition Entryを更新するにはどうしたらいいですか?例えば、私はMedicalCondition.conditionの5つのエントリを 'a、b、c、d、e'とし、 'b'を 'z'に変更したいとします。どうしたらいいですか?ありがとうございました –

関連する問題