、列「カテゴリ」を持つ、NSTextField
、およびカスタム アレイ コントローラがあります。NSTableView
NSColorWell
およびのNSTextField
列「カテゴリ」NSTextField
はアレイ コントローラにバインドされているため、テキスト フィールドに書き込んだすべての項目がこの列に表示されます。
私が抱えている問題は次のとおりです。
ユーザーが色を選択したときに、「カテゴリ」列の文字列がその色を取得するようにしNSColorWell
ます。すべて正常に動作しますが、もう一度アプリを開いて 2 番目のエントリを作成すると、「カテゴリ」列の文字列の色が、ユーザーが色を選択する前の最初の色に戻ります。
私が現在これを試している方法:
AppDelegate.h :
IBOutlet NSArrayController *doToItemsArrayController;
NSColorWell *colorWell;
- (IBAction)addNewToDoItem:(id)sender;
@property (assign) IBOutlet NSColorWell *colorWell;
AppDelegate.m :
@synthesize colorWell;
- (IBAction)addNewToDoItem:(id)sender
{
ToDoItem *newToDo = [[ToDoItem alloc] init];
[newToDo setCategory:@"Beispiel-Kategorie"];
[newToDo setColor:[NSColor greenColor]];
[doToItemsArrayController addObject:newToDo];
}
- (IBAction)colorWellColorChanged:(id)sender
{
NSColor *currentColor = [colorWell color];
NSArray *selectedItems = [doToItemsArrayController selectedObjects];
// Allen Items die Farbe geben
// Es können ja auch mehrere ausgewählt sein.
for (int i = 0; i < [selectedItems count] ; i++)
{
[[selectedItems objectAtIndex:i] setColor:currentColor];
}
}
ToDoItem.h :
NSString *category;
NSColor *color;
@property (retain) NSString *category;
@property (retain) NSColor *color;
ToDoItem.m :
@synthesize category;
@synthesize color;
- (id)init {
self = [super init];
if (self) {
color = [NSColor redColor];
}
return self;
}
- (id)initWithCoder:(NSCoder *)decoder
{
if(![super init])
return nil;
[self setCategory:[decoder decodeObjectForKey:@"category"]];
[self setColor:[decoder decodeObjectForKey:@"color"]];
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:[self category] forKey:@"category"];
[encoder encodeObject:[self color] forKey:@"color"];
}
私のコードが私の問題を理解し、これを機能させるのに役立つことを願っています.
あなたからの便りを楽しみにしています。ありがとう。