如何将数据重新加载到 NSTableView 中?
How to reload data into NSTableView?
我是 Objective-C 的新手,我发现有很多关于 iOS 和 UITableView 的教程,但几乎 none 关于 OS X Apps 通过 NSTableView 的教程。我已经建立了一个方法来检索我的数据,但我在最后一行收到错误消息:
"Property tableView not found on object type ProductsViewController".
我不知道将数据重新加载到我的 table 中的正确方法,或者我是否需要为此特定实例使用 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];
}
您需要为 NSTableViewDataSource
协议实现所需的委托方法。具体来说,你需要这两个:
numberOfRowsInTableView:
tableView:objectValueForTableColumn:row:
table 视图随后将调用这些方法来获取它想要的数据。
此外,a great tutorial 在 raywenderlich.com 上有关于使用 NSTableViews 的内容。
我是 Objective-C 的新手,我发现有很多关于 iOS 和 UITableView 的教程,但几乎 none 关于 OS X Apps 通过 NSTableView 的教程。我已经建立了一个方法来检索我的数据,但我在最后一行收到错误消息:
"Property tableView not found on object type ProductsViewController".
我不知道将数据重新加载到我的 table 中的正确方法,或者我是否需要为此特定实例使用 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];
}
您需要为 NSTableViewDataSource
协议实现所需的委托方法。具体来说,你需要这两个:
numberOfRowsInTableView:
tableView:objectValueForTableColumn:row:
table 视图随后将调用这些方法来获取它想要的数据。
此外,a great tutorial 在 raywenderlich.com 上有关于使用 NSTableViews 的内容。