如何将数据重新加载到NSTableView?

时间:2016-09-21 17:03:48

标签: objective-c cocoa nstableview

我是Objective-C的新手,我发现iOS和UITableView有很多教程,但是通过NSTableView,OS X Apps几乎没有。我已经构建了一个方法来检索我的数据但是我在最后一行收到错误:

“在对象类型ProductsViewController上找不到属性表视图”。

我不知道将数据重新加载到我的表中的正确方法,或者我是否需要为此特定实例使用NSTableView?有没有比使用NSTableView更好的方式来显示我的数据?

#import "ProductsViewController.h"
#import "Product.h"

#define getDataURL @"http://myurl"


@interface ProductsViewController ()

@end

@implementation ProductsViewController

@synthesize jsonArray, productsArray;

- (void)viewDidLoad {
[super viewDidLoad];



[self retrieveData];



}

-(NSInteger)numberOfRowsInTable:(NSTableView *)tableView{

return productsArray.count;
}

- (void) retrieveData{

NSURL * url = [NSURL URLWithString:getDataURL];
NSData * data = [NSData dataWithContentsOfURL:url];

jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

productsArray = [[NSMutableArray alloc] init];


for(int i = 0; i < jsonArray.count; i++){

    NSString * pID          = [[jsonArray objectAtIndex:i] objectForKey:@"id"];
    NSString * pName        = [[jsonArray objectAtIndex:i] objectForKey:@"product_name"];
    NSString * pPrice       = [[jsonArray objectAtIndex:i] objectForKey:@"product_price"];
    NSString * pDescription = [[jsonArray objectAtIndex:i] objectForKey:@"product_description"];
    NSString * pImage       = [[jsonArray objectAtIndex:i] objectForKey:@"product_image"];
    NSString * pDownload    = [[jsonArray objectAtIndex:i] objectForKey:@"product_download"];
    NSString * pVideo       = [[jsonArray objectAtIndex:i] objectForKey:@"product_video"];
    NSString * pFeatured    = [[jsonArray objectAtIndex:i] objectForKey:@"featured"];


    [productsArray addObject:[[Product alloc] initWithProduct_Name: pName andProduct_Price:pPrice andProduct_Description:pDescription andProduct_Image:pImage andProduct_Download:pDownload andProduct_Video:pVideo andProduct_Featured:pFeatured andProduct_ID:pID]];
}

[self.tableView reloadData];


}

1 个答案:

答案 0 :(得分:1)

您需要为NSTableViewDataSource协议实现所需的委托方法。具体来说,你需要这两个:

var databaseName = "XYZ";
var manager = Manager.SharedInstance;
manager.GetExistingDatabase(databaseName).Delete();

然后,表视图将为所需的数据调用这些方法。

此外,在raywenderlich.com上有a great tutorial关于使用NSTableViews的信息。