0

我有一个可以添加和删除项目的 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
4

1 回答 1

1

你的数组有你的类的实例,Favorites,并且在你的 addItemsWithTiles: 方法中你正在添加这些实例,而不是这些实例的一些字符串属性,这是我认为你想要的。如果您使用 [_array valueForKey:@"whateverKeyHasYourStrings"] 作为 addItemsWithTitles: 的参数,而不仅仅是 _array,我认为它可以正常工作。

于 2012-08-20T01:05:45.937 回答