这里有一个简单的viewDidLoad方法和一个ViewController中的UITableView委托:
import "HomeViewController.h"
import "AFNetworking.h"
import "SVPullToRefresh.h"
- (void)viewDidLoad
{
[super viewDidLoad];
[self parseJsonMethod];
items = [[NSMutableArray alloc] init]; // UPDATED CODE
items2 = [[NSMutableArray alloc] init]; // UPDATED CODE
[table addPullToRefreshWithActionHandler:^{
[self parseJsonMethod]; // <--- what's the number of NEW items after refreshing?
}];
}
- (void)parseJsonMethod{
// code to parse JSON file from the net ---> here I get NSMutableArray *items
NSURLRequest *requestJSON = [NSURLRequest requestWithURL:urlJSON];
AFJSONRequestOperation *operationJSON = [AFJSONRequestOperation
JSONRequestOperationWithRequest:requestJSON
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSMutableArray *results = [JSON valueForKey:@"results"];
// UPDATED CODE
for (id obj in [results valueForKey:@"value"]) {
if (![items containsObject:obj]) {
[items addObject:obj];
}
}
for (id obj2 in [results valueForKey:@"value2"]) {
if (![items2 containsObject:obj2]) {
[items2 addObject:obj2];
}
}
// END OF UPDATED CODE
[table reloadData];
[table scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
[table.pullToRefreshView stopAnimating];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"%@", [error userInfo]);
}];
[operationJSON start];
[table reloadData];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [items count]; // <--- items is the NSMutableArray parsed from JSON file on the net: HERE I HAVE THE PROBLEM, ITS ALWAYS 10!
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:
UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}
cell.textLabel.text = [NSString stringWithFormat:@"%@",[items objectAtIndex:indexPath.row]];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",[items2 objectAtIndex:indexPath.row]];
return cell;
}
正如你所看到的,我已经实现了SVPullToRefresh类来在刷表之后刷新数据,这很完美:拉动之后我可以看到新数据但是在SAME行上(刷新前后的行数是10)。我想在拉表和新解析后添加新行,并用旧数据保存旧行(每次10 +新项+ ...)。有一个简单的方法吗?或者至少要认出新物品的数量?也许实现insertRowsAtIndexPaths委托?请帮帮我。
更新:查看新编辑的代码,我已经声明了以前的项目,但仍然存在一些问题。
答案 0 :(得分:1)
如果给定新行,您正在做的是添加新行。你的items数组是这里的问题。无论您从JSON源获取什么数据,然而您将其添加到items数组都是问题。
如果您需要更多帮助,请向我们展示您的JSON代码以及items数组最初和重新加载时的填充位置。如果项目中没有新行,则它们不在表格中。
<强>更新强>
在这一行:items = [results valueForKey:@"value"]; // (initial number of items = 10)
我会尝试这样的事情:
for (id obj in [results valueForKey:@"value"]) {
if (![items containsObject:obj]) {
[items addObject:obj];
}
}
这将检查重复的项目并将其添加到您已有的项目中。现在,如果您的JSON Feed返回同一项目中的10个并且您不会看到差异,那么仍然可能存在问题。
对于超级基本只是为了看它只有[items addObjectsFromArray:[results valueForKey:@"value"]];