在过去的 7 小时内,我一直在尝试让这个 NSTableView 填充。我正在尝试获取所有当前正在运行的应用程序的列表,并将它们放入NSTableView中。最终,我想解析结果并在一列中组织 PID,在另一列中组织应用程序捆绑包。我在" return [listOfWindows objectAtIndex:row];"上收到EXC_BAD_ACCESS错误 我目前正在使用 Xcode 4.3.2 并运行 OS X Lion 10.7.4。 提前感谢大家!
@interface AppDelegate : NSObject <NSApplicationDelegate>
{
IBOutlet NSMenu *statusMenu;
IBOutlet NSButton *button;
IBOutlet NSWindow *menuWindow;
IBOutlet NSTableView *proTable;
NSArray *listOfWindows;
IBOutlet NSArrayController *arrayController;
AppDelegate *mainMenu;
NSWorkspace *workSpace;
NSStatusItem *statusItem;
}
@property (assign) IBOutlet NSWindow *window;
-(IBAction)loadConfig:(id)sender;
@end
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
- (void) awakeFromNib
{
[[NSDistributedNotificationCenter defaultCenter] addObserver:self
selector:@selector(loadMenu:)
name:@"WhiteBox"
object:nil];
[self addStatusItem];
//[proTable setDataSource:self];
listOfWindows = [[NSWorkspace sharedWorkspace] runningApplications];
NSLog(@"index %@", listOfWindows);
int y = 0;
y = [listOfWindows count];
NSLog(@"y = %d", y);
[proTable setAllowsMultipleSelection:YES];
}
-(void)applicationWillTerminate
{
NSLog(@"Will Terminate");
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
}
-(void)applicationDidResignActive:(NSNotification *)notification
{
NSLog(@"Resign Active");
}
-(void) addStatusItem
{
//Create a variable length status item from the system statusBar
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[statusItem retain];
//Set a Title for it
[statusItem setTitle:@"Status Item"];
//Set an Image and an alternate image
//[statusItem setImage:[NSImage imageNamed:@"lnc"]];
//[statusItem setAlternateImage: [NSImage imageNamed:@"status"]];
//Add a Tool Tip
[statusItem setToolTip:@"Status Item Tooltip"];
//Choose to highlight the item when clicked
[statusItem setHighlightMode:YES];
//To Trigger a method on click use the following two lines of code
[statusItem setMenu:statusMenu];
//[statusItem setAction:@selector(loadMenu:)];
}
-(IBAction)loadConfig:(id)sender
{
if(! [menuWindow isVisible] )
{
[menuWindow makeKeyAndOrderFront:sender];
} else {
[menuWindow performClose:sender];
}
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
return [listOfWindows count];
}
- (id)tableView:(NSTableView *)tableView
objectValueForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row
{
return [listOfWindows objectAtIndex:row];
}
@end
表视图的数据源是什么对象?我在您发布的源代码中没有看到任何对象来实现NSTableViewDataSource
协议。
此外,您是否尝试过在各种数据源方法中放置断点以查看调试器是否在其中停止?如果没有,这通常是一个好兆头,表明您的数据源未连接到您的表视图。
我得到:-[NSRunningApplication copyWithZone:]:当我运行你的代码时无法识别的选择器错误。 这可以通过将 tableView:objectValueForTableColumn:row: 中的返回行更改为
返回 [[listOfWindows objectAtIndex:row]localizedName];
NSRunningApplication 不符合 NSCopying,所以我不知道您是否可以将该类的实例放在表视图中。 但是,您可以获取其属性,如localizedName,processIdentifier和bundleIdentifier。
我以前遇到过这个问题,没有实现NSCopying的类,我很高兴知道是否有人知道在表视图或大纲视图中使用这些类的方法。