我有一个NSTableView,可以添加和删除项目。将项目添加到表格后,我希望这些项目也显示为NSPopUpButton的项目。我尝试了addItemsWithTitles:方法,但它给了我一个错误。
#import "TableController.h"
#import "Favorites.h"
@interface TableController ()
@property NSMutableArray *array;
@property (weak) IBOutlet NSTableView *tableView;
@property (weak) IBOutlet NSPopUpButton *popButton;
@end
@implementation TableController
- (id)init {
self = [super init];
if (self) {
_array = [[NSMutableArray alloc] init];
}
return self;
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [_array count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
Favorites *fav = [_array objectAtIndex:row];
NSString *ident = [tableColumn identifier];
return [fav valueForKey:ident];
}
- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
Favorites *fav = [_array objectAtIndex:row];
NSString *ident = [tableColumn identifier];
[fav setValue:object forKey:ident];
}
- (IBAction)add:(id)sender {
[_array addObject:[[Favorites alloc] init]];
[_tableView reloadData];
[_popButton addItemsWithTitles:_array];
}
-(IBAction)delete:(id)sender {
NSInteger row = [_tableView selectedRow];
[_tableView abortEditing];
if (row != -1) {
[_array removeObjectAtIndex:row];
}
[_tableView reloadData];
}
@end
所以我尝试记录对象的objectAtIndex:0并且没有得到字符串但是收到了一些数字:
Array string is <Favorites: 0x10013e820>
另外,我的收藏夹类是
#import "Favorites.h"
@interface Favorites ()
@property (copy) NSString *location;
@end
@implementation Favorites
- (id)init {
self = [super init];
if (self) {
_location = @"City, State or ZIP";
}
return self;
}
@end
答案 0 :(得分:1)
您的数组包含您的类,收藏夹的实例,并且在您的addItemsWithTiles:方法中添加这些实例,而不是这些实例的某些字符串属性,这是我想要的。如果你使用[_array valueForKey:@“whateverKeyHasYourStrings”]作为addItemsWithTitles的参数:而不仅仅是_array,我认为它会正常工作。