2012-06-29 4 views
0

Я знаю, что здесь есть масса похожих вопросов, но я просмотрел кучу и все еще застрял. Может ли кто-то просмотреть мой код и посмотреть, могут ли они найти причину, по которой методы UITableView не вызываются. Я проверил массив, и он заполняется, но когда я вызываю reloadData в таблице, ничего.UITableView не перезагружается после передачи данных в

Процесс заключается в том, что я делаю SOAP-вызов для получения данных, анализируя возвращенный XML в словарь (каждая запись представляет собой массив информации о магазине), а затем передают это контроллеру представления для таблицы. Затем я прохожу через словарь, получаю каждый массив, получаю имя хранилища и помещаю его в массив dataPointTitles. Это источник данных для моего стола. Делегаты установлены. Когда приложение inits я получаю счет 0 на источнике данных, который является правильным, поскольку данные еще не загружены. Как только пользователь извлекает данные, массив dataPointTitles заполняется (см. Распечатку журнала консоли ниже), но ни один из методов не запускается.

Вот мой код:

.h файл:

@interface DataController : UIViewController <UITableViewDelegate, UITableViewDataSource>{ 

NSMutableDictionary* dataDict; 
NSMutableArray* dataPointTitles; 

UILabel* lblDataLabel; 
UITableView* tblDataTable; 

SoapController* soapManager; 

ColorController* colorManager; 

MKMapView* thisMap; 
CLPlacemark* thisPlaceMark; 



} 

@property (nonatomic, retain) NSMutableDictionary* dataDict; 

- (void) parseData; 

- (void) setDataDict : (NSMutableDictionary*) passedDict; 

@end 

соответствующие части файла .m

#import "DataController.h" 

@interface DataController() 



@end 

@implementation DataController 

@synthesize dataDict; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    // Custom initialization 
} 
return self; 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

//color manager 
colorManager = [ColorController new]; 

//add data label 
lblDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 40.0, 300.0, 30.0)]; 
[lblDataLabel setTextColor:[UIColor whiteColor]]; 
[lblDataLabel setFont: [UIFont fontWithName:@"Helvetica-Bold" size: 12]]; 
[lblDataLabel setText:@"Local Medicare Providers and Services:"]; 
[lblDataLabel setBackgroundColor:[UIColor clearColor]]; 

//add the table 
tblDataTable = [[UITableView alloc] initWithFrame: CGRectMake(10.0, 70.0, 300.0, 300.0)]; 
tblDataTable.separatorStyle = UITableViewCellSeparatorStyleSingleLine; 
tblDataTable.separatorColor = [colorManager setColor:176.0:196.0:222.0]; 
tblDataTable.layer.borderWidth = 1.0; 
tblDataTable.rowHeight = 20.0; 
tblDataTable.scrollEnabled = YES; 
tblDataTable.delegate = self; 
tblDataTable.dataSource = self; 

[self.view addSubview:lblDataLabel]; 
[self.view addSubview:tblDataTable]; 

} 

- (void) setDataDict : (NSMutableDictionary*) passedDict { 

dataDict = passedDict; 
[self parseData]; 

} 


#pragma mark Parsing Data 
- (void) parseData { 

dataPointTitles = [[NSMutableArray alloc] init]; 

for(NSString* thisObj in dataDict) { 
    NSArray* thisDataSet = [dataDict objectForKey:thisObj]; 
    [dataPointTitles addObject:[thisDataSet objectAtIndex:1]]; 
} 
NSLog(@"%@", dataPointTitles); 
[tblDataTable reloadData]; 

} 

#pragma mark Table Management 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
NSLog(@"%i", [dataPointTitles count]); 
return 1; 

} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

return [dataPointTitles count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"tableCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

cell.textLabel.textColor = [UIColor colorWithRed:66.0/255.0 green:66.0/255.0 blue:66.0/255.0 alpha:1]; 
cell.textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size: 13.0]; 
cell.textLabel.text = [dataPointTitles objectAtIndex:indexPath.row]; 

CGRect cellFrame = [cell frame]; 
cellFrame.size.height = 50.0; 

return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

NSString* thisDataPointTitle = [dataPointTitles objectAtIndex:indexPath.row]; 

for(NSString* thisObj in dataDict) { 

    NSArray* thisDataPoint = [dataDict objectForKey:thisObj]; 

    if ([thisDataPoint objectAtIndex:1] == thisDataPointTitle) { 

    } 
} 
} 

Вот console.log выход из метода parseData:

"PASSAVANT DEVELOPMENT CORPORATION", 
"MYERS DRUG STORE INC", 
"WAL-MART STORES EAST LP", 
"JAMES GRANT MCGINNESS", 
"WAL-MART STORES EAST INC", 
"WILLIAM J DIMINO", 
"SUBURBAN EYE CARE OPTOMETRIC", 
"CMMC INC", 
"FOR EYES OPTICAL CO INC", 
"LACONS PHARMACY INC", 
"PASSAVANT DEVELOPMENT CORPORATION", 
"WAL-MART STORES EAST LP", 
"RITE AID CORPORATION", 
"JAMES GRANT MCGINNESS", 
"ABLE MEDICAL EQUIPMENT", 
"GIANT FOOD STORES LLC", 
"WALGREEN CO", 
"ACCESS CARE INC", 
"RITE AID CORPORATION", 
"CVS DEKALB NORRISTOWN INC", 
"FS-PHILADELPHIA LLC", 
"DRUG EMPORIUM INC", 
"PAUL D HALPERN OD", 
"HARRY W FIRTH JR", 
"ABLE MEDICAL EQUIPMENT", 
"ACME MARKETS INC DE", 
"BROWN'S CH LLC", 
"THE MEDICINE SHOPPE", 
"MYERS DRUG STORE INC", 
"NCS HEALTHCARE OF PENNSYVANIA INC", 
"ACCESS CARE INC", 
"NORMATEC INC", 
"WAL-MART STORES EAST LP", 
"COLE VISION CORPORATION", 
"RESTORATIVE INNOVATIONS INC", 
"ABLE MEDICAL EQUIPMENT", 
"CMMC INC", 
"KMART OF PENNSYLVANIA LP", 
"WAL-MART STORES EAST LP", 
"THERESE C DESCHENES OD PC", 
"ALLEN SOFFER OD PC", 
"WAL-MART STORES EAST INC", 
"RITE AID CORPORATION", 
"NORRISTOWN CVS INC", 
"WAL-MART STORES EAST LP", 
"FOR EYES OPTICAL CO INC", 
"LACONS PHARMACY INC" 
+0

В 'parseData', вы также можете регистрировать значение' tblDataTable' и 'tblDataTable.dataSource'? –

+0

Я получаю null для каждого ... Я мог видеть, что источник данных является нулевым, но почему таблица? – PruitIgoe

+0

Любая возможность 'parseData' вызывается перед' viewDidLoad' (или у вас есть два разных объекта DataController)? В противном случае у меня возникнет соблазн сделать «tblDataTable» сильным свойством, заставить все обновления пройти через «сеттер» и попытаться отслеживать, где он изменяется. –

ответ

1

От комментарии: по-видимому, у нас есть проблема с более чем одним объектом, вовлеченным в логику и вызывающим некоторую путаницу при анализе/просмотре-загрузке.

+0

спасибо за помощь – PruitIgoe

Смежные вопросы