Я впервые работаю над задачей c и столкнулся с проблемой, на которую я не нашел ответа.
Я загружаю набор данных из набора данных JSON и использую его для заполнения UITableView в UITableViewController.
Сначала при загрузке представления (viewDidLoad) я заполняю массив данными JSON из URL.
Далее данные загружаются как следует. numberOfRowsInSection показывает, что в массиве 30 результатов, что является правильным.
Однако Iphone загружает весь набор три раза в табличное представление.
Вот некоторый код из контроллера для этого представления: (Twitter используется в качестве примера, а не фактический набор данных, который я использую)
- (void)viewDidLoad {
[super viewDidLoad];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
//results = [[NSMutableArray alloc] init];
self.navigationItem.title=@"public_timeline";
self.tableView.allowsSelection = NO;
NSString *url = [[NSString alloc] init];
url = [[NSString alloc] initWithFormat:@"http://twitter.com/statuses/%s.json",@"public_timeline"];
if ([results count] == 0) {
[self parseJSON:url];
}
}
Here is the parseJSON (actual parse is done with the Cocoa JSON framework
-(void) parseJSON:(NSString *)URL{
NSURL *JSONURL = [NSURL URLWithString:URL];
NSData *responseData = [[NSData alloc] initWithContentsOfURL:JSONURL];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
results = [[NSMutableArray alloc] initWithArray:[responseString JSONValue]];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [results count];
}
затем вывод ячейки
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
// Set up the cell...
}
NSDictionary *cdict = [results objectAtIndex:indexPath.row];
cell.textLabel.text = [cdict valueForKey:@"text"];
return cell;
}
Я не уверен, что то, что я делаю, является лучшим способом сделать это, поэтому, если кто-то может мне помочь, это было бы здорово.