我的“MasterView”()类中有一个方法,它从URL解析.json数据,然后用信息填充表视图。为了更有条理,并将方法与其他所需方法分组,我试图将其移动到另一个NSOject类中,但它不起作用;没有错误,没有例外表视图根本不填充。
以下是“大师班”中的原始方法
- (void) fetchPosts:
{
NSError *error;
NSData *responseData = [NSData dataWithContentsOfURL:myURL];
NSDictionary *json = [NSJSONSerialization
JSONObjectWithData:responseData
options:kNilOptions
error:&error];
NSArray *objects = [[json objectForKey:@"data"] objectForKey:@"children"];
arr = [[NSMutableArray alloc] init];
for (NSDictionary *object in objects) {
NSString *title = [[object objectForKey:@"data"] objectForKey:@"title"];
//Post is just a random NSObject Class
Post *post = [[Post alloc] init];
post.title = title;
[arr addObject:post];
}
NSLog(@"Called");
[self.tableView reloadData];
}
其他课程中的编辑方法:
- (void) fetchPosts:(NSURL *)myURL withPostArray:(NSMutableArray*)postArr andTableView: (UITableView*)tableView
{
NSLog(@"CAlled");
NSError *error;
NSData *responseData = [NSData dataWithContentsOfURL:myURL];
NSDictionary *json = [NSJSONSerialization
JSONObjectWithData:responseData
options:kNilOptions
error:&error];
NSArray *objects = [[json objectForKey:@"data"] objectForKey:@"children"];
postArr = [[NSMutableArray alloc] init];
for (NSDictionary *object in objects) {
NSString *title = [[object objectForKey:@"data"] objectForKey:@"title"];
Post *post = [[Post alloc] init];
post.title = title;
[postArr addObject:post];
}
[tableView reloadData];
}
可以使用原始方法:[self fetchPosts:];
另一个是:[MyClass fetchPosts:myUrl withPostArray:arr andTableView:self.tableView];
我编辑了一些信息以使其更具可读性,如果有任何错误,请告诉我。
MyClass.h:
@interface MyClass : NSObject <UITableViewDelegate, UITableViewDataSource>
在MasterView中设置数据源:
//In ViewDidLoad
_delegate = myClass;
self.tableView.dataSource = _delegate;
self.tableView.delegate = _delegate;
//In .h
@property (strong, nonatomic) MyClass *delegate;
当我致电[MyClass fetchPosts:myUrl withPostArray:arr andTableView:self.tableView];
答案 0 :(得分:1)
如果表视图未填充,则表视图无法通过数据源获取所需数据。
您可能没有将dataSource
的{{1}}设置为您创建的新tableView
,或NSObject
仍然是MasterView
dataSource
。
另外,请确保实际调用此方法,并且传递的tableView
是视图中显示的方法。
修改:您有三种解决方案:
tableView
,然后调用MasterView
。 但从MVC的角度来看,这并不是很好。 [self.tableView reloadData]
来处理您的UIVieController
,它应该是表格视图的MasterView
。视图控制器应该从新对象调用所述方法,以检索数据并更新表视图。 即。像第二个解决方案,但视图控制器将调用方法而不是dataSource
。