为什么我的NSTableView数据源非法?

时间:2012-08-01 20:46:51

标签: objective-c nstableview

出于某种原因,我收到以下错误:

* 非法的NSTableView数据源()。必须实现numberOfRowsInTableView:和tableView:objectValueForTableColumn:row:

这是我的AppDelegate.h

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate, NSTableViewDataSource, NSTableViewDelegate> {

    NSMutableArray *userNotifications;
}

@property NSMutableArray *userNotifications;

@end

我的AppDelegate.m

#import "AppDelegate.h"

@implementation AppDelegate
@synthesize userNotifications;

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{

    NSUserNotification *userNotification = notification.userInfo[NSApplicationLaunchUserNotificationKey];

    userNotifications = [NSMutableArray new];

    if(userNotification) {
        [self userActivatedNotification:userNotification];
    } else {
        for(int i=1; i <= 10; i++) {

            NSString *title = [NSString stringWithFormat: @"Title %d", i];
            NSString *message = [NSString stringWithFormat: @"Message %d", i];

            NSArray *notificationObj = [[NSArray alloc] initWithObjects:title, message, nil];
//          NSLog(@"Array: %@", notificationObj);
            [userNotifications addObject:notificationObj];
//          NSLog(@"Notifications: %@", userNotifications);
            [self deliverNotificationWithTitle:title message:message];
        }
    }

}

- (void)deliverNotificationWithTitle:(NSString *)title
                            message:(NSString *)message
{

    NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter];
    NSUserNotification *userNotification = nil;

    userNotification = [NSUserNotification new];
    userNotification.title = title;
    userNotification.informativeText = message;

    center.delegate = self;
    [center scheduleNotification:userNotification];

}


- (void)userActivatedNotification:(NSUserNotification *)userNotification
{
//  [[NSUserNotificationCenter defaultUserNotificationCenter] removeDeliveredNotification:userNotification];

    printf("* User activated notification:");
//  NSLog(@"Title: %@", userNotification.title);just do it in
//  NSLog(@"Message: %@", userNotification.informativeText);
    [[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString:@"https://www.google.com/"]];
}

- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center
     shouldPresentNotification:(NSUserNotification *)userNotitification
{
    printf("* Notification presented.");
    return YES;
}


- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView
{
    return [userNotifications count];
}
- (id) tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    return [userNotifications objectAtIndex:row];
}

@end

1 个答案:

答案 0 :(得分:2)

我必须将App Delegate设置为Table视图的数据源。一旦我这样做,错误就消失了。