将NSTableView数据添加到NSPopUpButton项目

时间:2012-08-19 20:55:20

标签: objective-c cocoa nstableview nspopupbutton

我有一个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

1 个答案:

答案 0 :(得分:1)

您的数组包含您的类,收藏夹的实例,并且在您的addItemsWithTiles:方法中添加这些实例,而不是这些实例的某些字符串属性,这是我想要的。如果你使用[_array valueForKey:@“whateverKeyHasYourStrings”]作为addItemsWithTitles的参数:而不仅仅是_array,我认为它会正常工作。