2009-05-27 12 views
0

***** EDIT ***** 私がよく分からないことは、コード内のモデルからエンティティにアクセスする方法と、特定のインスタンスにアクセスする方法ですそのコード内のエンティティのそれは私が持っている主な問題を要約しています。ArrayControllerに追加、コアデータの属性を編集

***** ENDのEDIT *****

私はそれに追加するボタンでテーブルビューを持っています。ボタンをクリックすると、ファイルを選択する開いたダイアログがユーザに表示されます。新しいオブジェクトがアレイコントローラに追加されます。どのようにすればよいかわからないのは、この新しいオブジェクトのコアデータ属性を編集することです。ファイル名とパス名には2つの属性があり、編集方法がわかりません。 openPanelDidEnd:returnCode:contextInfo:関数の一番下を見ると、私が達成しようとしていることがわかります。添付ファイルとアイテム:

- (IBAction)addAttachment:(id)sender 
{ 
    panel = [NSOpenPanel openPanel]; 
    [panel beginSheetForDirectory:nil 
       file:nil 
       modalForWindow:[NSApp mainWindow] 
      modalDelegate:self 
      didEndSelector:@selector(openPanelDidEnd: 
          returnCode: 
          contextInfo:) 
       contextInfo:NULL]; 
} 

- (void)openPanelDidEnd:(NSOpenPanel *)openPanel 
      returnCode:(int)returnCode 
      contextInfo:(void *)x 
{ 
    if (returnCode == NSOKButton) 
    { 
     NSArray *files = [openPanel filenames]; 

     int i; 
     for (i = 0; i < [files count]; i++) 
     { 
      NSString *file = [files objectAtIndex:i]; 
      [attachmentController add:x]; 
      // How do I add filenames here? 
      // I'm assuming it involves KVC like 
      // [something setValue:@"file" forKey:@"filename"]; 
      // But I don't know hot to get the something 
      // i.e. since I have multiple attachments, 
      // how do I get the one I just created 
     } 
    } 
} 

が************** 簡体EDIT ***********、私のモデルは2つのエンティティを持っています。 ItemはAttachmentと多対多の関係にあり、各Itemは多くのAttachmentを持つ可能性があります。

マイopenPanelDidEnd:リターンコード:contextInfo:メソッドは次のようになります。何らかの理由で

 NSString *filename = [files objectAtIndex:i]; 
     MySchoolPlanner_AppDelegate *myAppDelegate = [[MySchoolPlanner_AppDelegate init] alloc]; 
     [NSEntityDescription insertNewObjectForEntityForName:@"Attachment" 
             inManagedObjectContext:[myAppDelegate managedObjectContext]]; 
     [myAppDelegate release]; 

、添付のアレイコントローラにバインドされたテーブルビューは、いずれも追加しません。また、KVCを使用するために作成した添付ファイルにアクセスする方法がわかりません。

答えて

2

NSArrayのadd:メソッドは、初期化せずに作成して使用できるCore Dataエンティティを持っているときにボタンをフックするものです。この場合は、ちょうどあなたがコード内で管理対象オブジェクトを作成するために、ご使用のアレイコントローラおよび適切なエンティティ名を使用している管理対象オブジェクトコンテキストにNSEntityDescriptionの

+ (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context 

を呼び出します。エンティティのサブクラスを作成した場合は、そのプロパティを直接設定するか、まだキー値コーディングを行っていない場合はその値を使用します。

+0

助けてくれてありがとうが、私はまだ少し混乱しています。私の編集を参照してください。 ありがとう! – Walker

+1

あなたのコードでは、全く新しいアプリケーションコントローラを作成しています(2番目のMOコンテキストまたはnilを指定して、後で破棄します)。既存のコンテキストを既に使用しているので、これは少し後ろです。 私が靴を履いていたのであれば、Cocoaフレームワークとそれが使用するデザインパターンに慣れる機会が得られるまで、実際にはCore Dataを保留にします。コアデータはいくつかの面で簡単にしますが、基本を置き換えるものではありません。 –

+0

私はおそらく私の頭の中にいると知っていますが、私はコアデータに基づいてアプリケーションを構築していますが、ほとんどのコアデータはIBで行われています。私は、近い将来、Core Dataに徹底的に慣れ親しんでいきたいと考えていますが、私はこれを今すぐ解決したいと思います。しかし、あなたの助けをありがとう。 私は、コード内のモデルからエンティティにアクセスする方法と、そのコード内のエンティティの特定のインスタンスにアクセスする方法がわからないと思います。 – Walker

関連する問題