0

fetchedResultsControllerからメインエンティティと関係があるエンティティのデータ行を編集する必要があります。この場合、「theUser」はユーザーエンティティのインスタンスです。

基本的に、既存のCannedMessage行の1つを編集して、保存する必要があります。以下に示すように、「メッセージ」に正常にアクセスできますが、「theUser」のmanagedObjectContextにどのように保存するかについて、必要なCannedMessageを見つけたらわかりません。

何かアドバイス?

NSArray *msgs = [theUser.Messages allObjects];

NSPredicate *activeMatch = [NSPredicate predicateWithFormat:@"defaultMessage == 1"];
NSArray *matched = [msgs filteredArrayUsingPredicate:activeMatch];

CannedMessage *msgToEdit;

for(CannedMessage *msg in matched) {
    msgToEdit = msg;
}
4

1 に答える 1

0

問題は、Core Data のオブジェクト指向の用語ではなく、SQL の用語で考えていることです。探しているデータは SQL 行ではなく、管理対象オブジェクトの属性にあります。CannedMessageこの場合 (私は推測します)、インスタンスの属性を探しています。

matched配列には、エンティティで初期化されたマネージド オブジェクトまたは専用の NSManagedObject サブクラスのインスタンスのいずれかが含まれます(CannedMessage設定したように見えるものを設定した場合)。

属性の名前がtheMsg. 汎用管理対象オブジェクトの属性にアクセスするには:

for(CannedMessage *msg in matched) {
    msgToEdit = [msg valueForKey:@"theMsg"];
}

... カスタム クラスにアクセスするには:

for(CannedMessage *msg in matched) {
    msgToEdit = msg.theMsg;
}

Core Data を学習するときは、SQL について知っていることをすべて単純に忘れることが非常に重要です。SQL について真にコア データに変換されるものはありません。Core Data は、SQL をラップしたオブジェクト指向ではありません。エンティティはテーブルではなく、リレーションシップはリンク テーブルや結合ではなく、属性は列ではなく、値は行ではありません。代わりに、Core Data は、現実世界のオブジェクト、イベント、または条件をモデル化するカスタム クラスを手動で記述した場合と同様に、オブジェクトを作成します。Core Data は、多くの永続化オプションの 1 つとして SQL をほとんど後付けとして使用します。

私の経験では、SQL について知れば知るほど、ギアを Core Data やその他のオブジェクト グラフ API に移行するのが難しくなります。新しいものをすでに習得したものに翻訳したい. それは自然なことですが、衝動に抵抗してください。

于 2010-09-04T17:22:02.660 に答える