2011-10-21 25 views
2

私はCoreDataをかなり使い慣れていて、MySQL-DBのバックグラウンドから来ているので、CoreData Moddelingはある時点では分かりづらいものです。私はあなたがこの基本的な質問で私を助けることができると確信しています。CoreDataの基本的な多対一関係の配列データ

CoreData modeling

CoreDataモデル-descripton: 私のデータベース・モデルは基本的に2つのエンティティで構成されています。最初のものは「マネージャ」と呼ばれ、2番目のものは「郵便番号」と呼ばれます。 「マネージャー」には3つの属性があり、現時点ではごくわずかです。私の意見では、重要なことはここでは "郵便番号"と呼ばれる関係です。 "Zipcodes" -Entityにはzipという属性があり、これは16 intです。それには「マネージャー」と呼ばれる関係もあります。

いいえ私はポイントに達するでしょう:各マネージャーは、彼がすべての売上を担当する複数のzicodesを持っています。問題は、マネージャエンティティをセットアップし、複数のziplcodeを彼にリンクさせたいということです。マネージャーごとの郵便番号は、カンマで区切られた1つの文字列で区切られています。 (12345,56789、...)

最初にマネージャエンティティを作成しています。

Manager *manager = [NSEntityDescription insertNewObjectForEntityForName:@"Manager" inManagedObjectContext:self.managedObjectContext]; 

次のステップは、すべてのジコードをアレイに分けることです。

Manager *manager = [NSEntityDescription insertNewObjectForEntityForName:@"Manager" inManagedObjectContext:self.managedObjectContext]; 

NSArray *zipcodesArray = [[dict objectForKey:@"zipcodes"] componentsSeparatedByString:@","]; 

for (NSString *zip in zipcodesArray) { 
    ??? 
} 

だから今は私が立ち往生しているところです。後で私はsearchBarを介して郵便番号をチェックしなければならないので、それらはデータベース内で分離されるべきです。各郵便番号に対してmanagedObjectModelを作成する必要がありますか?どのようにそれらをすべて「1つの」マネージャーエンティティに接続しますか?私はそれを達成する方法があると確信していますが、私は実際にどのように知っていません。

私の質問は分かりやすいと思います。あなたが知りたいことがあれば、お気軽にお問い合わせください。

ありがとう!

答えて

3
for (NSString *zip in zipcodesArray) { 
    NSManagedObject* zipcode = [NSEntityDescription insertNewObjectForEntityName:@"Zipcode" 
                inManagedObjectContext:self.managedObjectContext]; 
    [zipcode setValue:zip forKey:@"zip"]; 
    [zipcode setValue:manager forKey:@"manager"]; 
} 

、Core Dataは自動的にバックジップコードにマネージャーから関係に郵便番号を挿入するの世話をします。

+0

ああ、他の方法ラウンド。私はいつもヒイラシのようなマネージャーと郵便番号を考えました。だから私はマネージャー - >郵便番号からの接続を作らなければならないと思った。ご協力いただきありがとうございます!ほんとうにありがとう!ところで、後でエンティティ関係を更新できますか? – rdesign

+1

本当に「後で」はありません。郵便番号のマネージャフィールドを設定するたびに、(両方向の)関係が更新されます。ちなみに、好きな場合はリレーションのもう一方の端を修正することもできます。その場合、 'NSMutableSet * zipCodes = [manager mutableSetValueForKey:@" zipcodes "];'を実行した後で、変更可能なセットを変更してマネージャに関連付けられた郵便番号のセットを変更することができます(そして、郵便番号から管理者に自動的に設定されます)。 – edsko

0

Zipcodeの管理オブジェクトインスタンスを作成します。そのオブジェクトのzip属性をzipcodesArrayの文字列の値に設定します。作業が完了したら、管理対象オブジェクトをデータストアに保存し、エラーをチェックし、郵便番号配列全体を歩き回るまで繰り返します。最後の行の管理者に郵便番号から関係を確立することにより

+0

あなたの答えをありがとう。どのzipcode管理オブジェクトインスタンスをマネージャ管理オブジェクトにどのように接続すればよいですか?後で私はすべての郵便番号を検索し、適切なマネージャーを見つけることができるはずです。 – rdesign

+0

edskoが私の答えに相当するコードを書いたようです。それを見てみましょう。 –