NSArrayおよびNSArrayControllerをコアデータで使用するにはどうすればよいですか?
-
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メソッドを作成することはできませんか?
所属していません StackOverflow