NSArrayおよびNSArrayControllerをコアデータで使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1023378

  •  06-07-2019
  •  | 
  •  

質問

NSArrayにアクセスして動作する必要のあるコードがあります。 Core Dataで使用しているNSArrayがあり、その中にデータが含まれますが、NSArrayControllerがNSArrayにアクセスする方法がわかりません。

次のようにヘッダーファイルで単純に宣言することはできません。 Core Dataで使用しているNSArrayにどのくらい正確にアクセスしますか?

マイヘッダーファイル:

#import <Cocoa/Cocoa.h>


@interface MyOutlineView : NSOutlineView {
    NSArrayController* objectArray;
}

@end

実装ファイル:

#import "MyOutlineView.h"

@implementation MyOutlineView

- (void) outlineView: (NSOutlineView *) aView
     willDisplayCell: (id) aCell
      forTableColumn: (NSTableColumn *)aColumn
                item: (id) anItem
{
    id rootObj = anItem;
    unsigned row = [aView rowForItem:anItem];

    [aCell setDrawsBackground: YES];

    while ([aView levelForRow:row] != 0) {
        row --;
        rootObj = [aView itemAtRow:row];
    }

    // The colours here are foul and ugly.  Use something else, for
    // God's sake!
    if( [objectArray indexOfObject:rootObj] % 2 )
        [aCell setBackgroundColor: [NSColor yellowColor]];
    else
        [aCell setBackgroundColor: [NSColor blueColor]];
}

@end
役に立ちましたか?

解決

XibからNSArrayControllerに接続されたIBOutletでテストアプリを作成しました。このテストでは:

  • Core Dataアプリケーションテンプレートから開始;
  • 2つの属性(string、int)を使用してデータモデルにエンティティを作成しました。

Xibで:

  • Test_AppDelegate.managedObjectContextに接続された、管理オブジェクトコンテキストを備えた配列コントローラー;
  • arrayObjectsのArray Controllerの最初と2番目の属性に接続されたcolsを持つTableView;
  • アレイコントローラーのadd:およびremove:アクションに接続された[追加]および[削除]ボタン;
  • ボタン&quot;カウントの表示&quot;およびラベル; -

コード内(Test_AppDelegate。*):

  • IBOutlet NSArrayController * ac; (Test_AppDelegate.acからArray ControllerにXibで接続);
  • IBOutlet NSTextField * nLabel; (Xibでラベルに接続);
  • (IBAction)showNum:(id)sender; (「カウントを表示」ボタンから接続);
  • アクションshowNumのコード: [nLabel setIntValue:[[acarrayObjects] count]];

できること:

  • テーブルビューおよび制御配列へのオブジェクトの追加/削除;
  • コードからNSArrayControllerにアクセスして、arrangedObjects配列を取得します。

したがって、IBOutletをコードからXibの配列コントローラーにバインドし、arrangedObjectsにアクセスすると動作します。

他のヒント

これを取得できない可能性がありますが、initWithArrayメソッドを作成することはできませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top