-4

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

このようにヘッダーファイルで単純に宣言することはできません。アクセスNSArray *objectArray;する方法またはアクセス先がわからないため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
4

2 に答える 2

0

Xib から NSArrayController に接続された IBOutlet を使用してテスト アプリを作成しました。このテストでは、次のものがあります。

  • Core Data アプリケーション テンプレートから開始。
  • 2 つの属性 (string、int) を持つデータ モデルで作成されたエンティティ。

シブで:

  • Test_AppDelegate.managedObjectContext に接続された、マネージド オブジェクト コンテキストを持つ配列コントローラー。
  • 配列コントローラーの配列されたオブジェクトの 1 番目と 2 番目の属性に接続された列を持つ TableView。
  • アレイ コントローラーの add: および remove: アクションに接続された [追加] ボタンと [削除] ボタン。
  • ボタン「カウントを表示」とラベル。-

コード内 (Test_AppDelegate.*):

  • IBOutlet NSArrayController *ac; (Xib で Test_AppDelegate.ac から Array Controller に接続);
  • IBOutlet NSTextField *nLabel; (Xib で Label に接続);
  • (IBAction)showNum:(id)送信者; (「Show Count」ボタンから接続);
  • 実際のコード showNum: [nLabel setIntValue:[[ac ArrangeObjects] count]];

私はできる:

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

したがって、コードから Xib の配列コントローラーに IBOutlet をバインドし、その ArrangeObjects にアクセスすることは機能するはずです。

于 2009-06-23T16:03:33.360 に答える
0

私はこれを取得していないかもしれませんが、initWithArray メソッドを作成することはできませんか?

于 2009-06-24T19:55:18.717 に答える